Spring JTA TransactionManager 配置:支持 Tomcat 和 JBoss

2024-03-12

我有一个使用 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>

不过,在 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>

有没有一种方法可以配置它,以便使用适当的 TransactionManager - JBoss 或 JOTM - 而无需两个不同的配置文件?


我认为您忽略了 JNDI 的要点。 JNDI 几乎是为了解决您遇到的问题而编写的!

我认为您可以将其提升一个级别,因此根据您的情况,不要使用“userTransaction”或“来自 JNDI 的 transactionManager”。为什么不将“JtaTransactionManager”添加到 JNDI。这样,您就可以将配置推送到 JNDI 应该所在的位置,而不是创建更多的配置文件 [ 就像还不够;) ]。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring JTA TransactionManager 配置:支持 Tomcat 和 JBoss 的相关文章

随机推荐