一尘不染

Spring JTA TransactionManager配置:同时支持Tomcat和JBoss

java

我有一个使用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-而不需要两个不同的配置文件?


阅读 379

收藏
2020-12-03

共1个答案

一尘不染

我认为您已经错过了JNDI的重点。JNDI是为解决您遇到的问题而编写的!

我认为您可以将其提高一个级别,所以根据您的情况,而不是使用“ userTransaction”或“ JNDI的事务管理器”。为什么不将“
JtaTransactionManager”添加到JNDI。这样,您可以将配置推送到应该存在的JNDI,而不是创建更多的配置文件[好像还没有足够的;)]。

2020-12-03