代码之家  ›  专栏  ›  技术社区  ›  Jippe

Spring:没有配置事务管理器

  •  2
  • Jippe  · 技术社区  · 15 年前

    我和这个问题纠结了一段时间,但没有找到解决办法。希望有人能帮我。

    调试[http-8080-1]注释IonTransactionSpect.CreateTransactionIf必要(267)|跳过事务连接点[nl.forestfields野餐.view.controller.ShoppingListController.cashIn]因为没有配置事务管理器

    另外,在出现异常的情况下,不会回滚事务。

    以下是我的配置:

    野餐-servlet.xml:

      <beans>
    
        <context:component-scan base-package="picnic" />
        <context:annotation-config />
    
        <tx:annotation-driven />
        .
        .
        .
    

    <bean class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" id="sessionFactory">
    
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            </props>
        </property>
        <property name="dataSource" ref="dataSource" />
    </bean>
    
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
        <property name="sessionFactory" ref="sessionFactory" />
     </bean>
    
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>${hibernate.connection.driver_class}</value>
        </property>
        <property name="url">
            <value>${hibernate.connection.url}</value>
        </property>
        <property name="username">
            <value>${hibernate.connection.username}</value>
        </property>
        <property name="password">
            <value>${hibernate.connection.password}</value>
        </property>
    </bean>
    
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    

    @Transactional(rollbackFor=IllegalCostException.class)
    public ModelAndView cashIn(@RequestParam final Long id) throws IllegalCostException, llegalOrderStateException, IllegalShoppingListStateException {
    
      final ShoppingList shoppingList = shoppingListRepository.getById(id);
      shoppingList.cashIn();
      shoppingListRepository.add(shoppingList);
    
      return new ModelAndView(...);
    }
    

    有人能看到问题吗?

    吉佩

    5 回复  |  直到 15 年前
        1
  •  6
  •   Jerrish Varghese    15 年前

    试着换衣服

    <tx:annotation-driven />
           to
    <tx:annotation-driven transaction-manager="transactionManager" />
    

    找不到其他问题。

        2
  •  2
  •   Miguel Ping    15 年前

    此外,回滚只发生在 .

    @Transactional(rollbackFor = { IllegalCostException.class, llegalOrderStateException.class })
    public ModelAndView cashIn(@RequestParam final Long id) throws IllegalCostException, llegalOrderStateException, IllegalShoppingListStateException {
    
      final ShoppingList shoppingList = shoppingListRepository.getById(id);
      shoppingList.cashIn();
      shoppingListRepository.add(shoppingList);
    
      return new ModelAndView(...);
    }
    
        3
  •  1
  •   Mark Hall    13 年前

    要解决问题,您必须声明:

    <tx:annotation-driven />
    

    进入之内 野餐背景-数据库.xml

    lrdblck公司

        4
  •  0
  •   skaffman    15 年前

    你说你有两个不同的bean定义文件。它们代表两个不同的应用程序上下文,还是一个导入另一个?

    spring文档对此并不清楚,但可能只有在“transactionManager”bean与其自身处于相同的上下文中时,才会自动定位它。如果transactionManager在父上下文中,则可能找不到它。

    正如jerrish所说,只需显式地指定元素的事务管理器属性。

        5
  •  0
  •   Kai Moritz    13 年前

    试着换衣服

    `<tx:注释驱动/>

       to 
    

    <

    这并不是解决方案,因为春季的文档中说:

    中可以省略事务管理器属性 要连接的PlatformTransactionManager的名称为 事务管理器。 Using @Transactional

    一定是别的什么东西改变了。。。