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层有没有什么可以做,以使双方的事务管理器?
这工作是工作要么!我将事务管理器限定符添加到DAO层,它像一个魅力。 Propagation.Required停止DAO层被绕过服务层。这实际上是一个很好的做法。 –
有趣的是,我总是在DAO方法中使用“Required”,只有我对复杂用例的服务是“REQUIRES_NEW”,通常它们也是“必需的”。当然,每个要求是不同的。 –