java - Spring JTA TransactionManager 配置 : Supporting both Tomcat and JBoss

标签 java spring jboss 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>

不过,在 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 中,而不是创建更多的配置文件 [ 好像还不够 ;) ]。

关于java - Spring JTA TransactionManager 配置 : Supporting both Tomcat and JBoss,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/117751/

相关文章:

Java、 hibernate 、 Spring

java - 强制 Spring 的 MBeanExporter 使用特定的 MBeanServer

Java绘制RadialGradientPaint圆切成矩形

java - 如何让我的 GUI Frame 变大?

java - gradle init 文件可以被保存地删除吗?

java - Xamarin JAR 绑定(bind)未为 android.app.IntentService 的派生类创建绑定(bind)

java - 永久性 JMS 连接失败,但没有错误或 InactivityExceptions

java - jboss-as-maven-plugin - 添加邮件 session 资源

JBoss AS 7禁用热部署

JBoss7 上的 MySQL : DriverManager says caller does not have permission to load driver