【问题标题】:Spring: No transaction manager has been configuredSpring:没有配置事务管理器
【发布时间】:2010-10-18 21:29:02
【问题描述】:

我一直在努力解决这个问题,但没有找到解决方案。希望任何人都可以帮助我。

我配置了一个 HibernateTransactionManager。但是,我在日志文件中看到以下消息:

调试 [http-8080-1] AnnotationTransactionAttributeSource.getTransactionAttribute(107) |添加具有属性 [PROPAGATION_REQUIRED, ISOLATION_DEFAULT, -nl.forestfields.picnic.domain.model.exception.IllegalCostException] 的事务方法 [cashIn]

调试 [http-8080-1] AnnotationTransactionAspect.createTransactionIfNecessary(267) |跳过事务连接点 [nl.forestfields.picnic.view.controller.ShoppingListController.cashIn] 因为没有配置事务管理器

此外,如果发生异常,事务不会回滚。

这是我的配置:

picnic-servlet.xml:

  <beans>

    <context:component-scan base-package="picnic" />
    <context:annotation-config />

    <tx:annotation-driven />
    .
    .
    .

野餐-上下文-db.xml:

<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(...);
}

谁能看出问题所在?

干杯, 吉普

【问题讨论】:

    标签: hibernate spring transactions


    【解决方案1】:

    尝试改变

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

    在这里找不到任何其他问题。

    【讨论】:

    • 2.5 年后...您的回答解决了我的问题。抱歉,我不能接受你的回答是正确的,但至少你得到了我的 +1。
    【解决方案2】:

    此外,回滚仅发生在 未经检查的异常。 如果要回滚检查的异常,则必须在 @Transactional 注释中声明它:

    @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】:

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

      <tx:annotation-driven />
      

      进入 picnic-context-db.xml 而不是 picnic-servlet.xml

      lrdblck

      【讨论】:

        【解决方案4】:

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

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

        正如 jerrish 所说,只需明确指定元素的 transaction-manager 属性即可。

        【讨论】:

          【解决方案5】:

          尝试改变

          `

             to 
          

          在这里找不到任何其他问题。

          这不可能是解决方案,因为弹簧文档说:

          你可以省略事务管理器属性 如果是 bean 名称,则标记 您要连接的 PlatformTransactionManager 具有名称 事务管理器。 Using @Transactional

          其他的东西肯定发生了变化……

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-07-30
            • 2014-02-22
            • 2015-04-24
            • 2011-07-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多