他们建议在Java EE环境中使用JTA事务支持.
但是如何在Tomcat6中配置JTA以便Hibernate Session可以使用它呢?
从版本3.0.1开始,Hibernate添加了该
SessionFactory.getCurrentSession()
方法.最初,这假定使用JTA事务,其中JTA事务定义了当前会话的范围和上下文.鉴于众多独立JTA TransactionManager实现的成熟度,大多数(如果不是全部)应用程序应该使用JTA事务管理,无论它们是否部署到J2EE容器中.基于此,您需要使用基于JTA的上下文会话.
我有一个使用JPA和JTA与Spring的Web应用程序.我想支持JBoss和Tomcat.在JBoss上运行时,我想使用JBoss自己的TransactionManager,当在Tomcat上运行时,我想使用JOTM.
我有两种情况都可以工作,但我现在发现我似乎需要为这两种情况分别使用两种Spring配置.使用JOTM,我需要使用Spring JotmFactoryBean
:
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction">
<bean class="org.springframework.transaction.jta.JotmFactoryBean"/>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
但是在JBoss中,我只需要从JNDI获取"TransactionManager":
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager">
<bean class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="resourceRef" value="true" />
<property name="jndiName" value="TransactionManager" />
<property name="expectedType"
value="javax.transaction.TransactionManager" />
</bean>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
有没有办法配置它,以便使用适当的TransactionManager - JBoss或JOTM - 而不需要两个不同的配置文件?