Spring JTA TransactionManager config:支持Tomcat和JBoss

Hen*_*ing 10 java jboss spring jta jotm

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

Dav*_*omb 14

我想你已经错过了JNDI的观点.JNDI几乎是用来解决你遇到的问题的!

我认为你可以把它提升一个级别,而不是根据你的情况使用"userTransaction"或"来自JNDI的transactionManager".为什么不将"JtaTransactionManager"添加到JNDI.这样你就可以将配置推送到JNDI所在的位置,而不是创建更多的配置文件[就像已经不够了;)].