0

我正在使用Spring 3.2.5.Release和Hibernate 4.2.7.Final。我正在部署Websphere 7服务器。我有两个应用程序上下文文件,每个都有自己的sessionFactory类型多个Hibernate事务管理器问题

<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">....</bean> 


    <bean id="sessionFactory1" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" lazy-init="true">... </bean> 

问题在于多个HibernateTransactionManager。我定义了两种事务经理为

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
    <qualifier value="transactionManager"/> 
    </bean> 

<bean id="txManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory1" /> 
    <qualifier value="txManager"/> 
</bean> 

在上下文文件之一,我有这样的代码运行期间然而提到这个

<tx:annotation-driven/> 
<bean 
    class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 

loggingManager.persistLog(loadLog); // using txManager 
    ..... 
    persistenceService.persist(dataEntity); // using transactionManager 

我ge t以下例外

org.springframework.transaction.IllegalTransactionStateException: No existing transaction found for transaction marked with propagation 'mandatory' 

请注意,第一笔交易是成功的。我看到为loadLog生成的id。我annoted与

@Transactional(value="txManager") // with respective transaction manager 

我的业务层和与

@Transactional(propagation = Propagation.MANDATORY) 

我DAO层有没有什么可以做,以使双方的事务管理器?

回答

1

该服务使用txManager

@Transactional(value="txManager") 

,服务是调用库或DAO,必须在服务交易中属于或运行了。你必须做到以下几点:

@Transactional(value="txManager" propagation = Propagation.MANDATORY) 

为什么Propagation.MANDATORY?为什么不要传播。要求?或者仅仅是

@Transactional(value="txManager") 

由于Propagation.REQUIRED默认使用。

BTW只考虑使用@Transactional如果你的@Transactional服务将与txManagertransactionManager的

+0

这工作是工作要么!我将事务管理器限定符添加到DAO层,它像一个魅力。 Propagation.Required停止DAO层被绕过服务层。这实际上是一个很好的做法。 –

+0

有趣的是,我总是在DAO方法中使用“Required”,只有我对复杂用例的服务是“REQUIRES_NEW”,通常它们也是“必需的”。当然,每个要求是不同的。 –