我有一个网应用程序访问用户和JTA与春天。我想到支持Boss和Tomcat。上运行时Boss,我想到使用Boss'自些用,并且运行时,在Tomcat,我想到使用JOTM.

我有两个方案的工作,但我现在发现,我似乎需要两个独立的弹的配置用于两种情况。与JOTM,我需要使用的弹簧 JotmFactoryBean:

<bean id="transactionManager" 
 class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="userTransaction">
        <bean class="org.springframework.transaction.jta.JotmFactoryBean"/>
    </property>
</bean>

在Boss,虽然,我只是需要获取"些用"从JNDI:

<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>

有没有一种方法,配置这使得适当些用-Boss或JOTM-是使用,而不需要对两个不同的配置文件吗?

有帮助吗?

解决方案

我认为你错过了JNDI的观点。 JNDI几乎是为了解决你遇到的问题而编写的!

我认为你可以把它提升一个级别,所以不要使用<!> quot; userTransaction <!>;或者来自JNDI <!>的transactionManager!视你的情况而定。为什么不添加<!>“JtaTransactionManager <!>”;到JNDI。这样你就可以将配置推送到JNDI所在的位置,而不是创建更多的配置文件[比如已经不够了;]。

其他提示

你可以使用PropertyConfigurerPlaceholder注豆引用,以及简单的价值观。

例如,如果你打电话给你的豆'jotm"和"boss'然后你可以注入你TM如:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE">
    <property name="location" value="classpath:/path/to/application.properties"/>
</bean>
<bean id="jotm">...</bean>
<bean id="jboss">...</bean>
<bean id="bean-requiring-transaction-manager">
    <property name="transactionManager" ref="${transaction.strategy}"/>
</bean>

然后你可以互换交易管理人员的使用

  • 交易。战略=jotm 在一个属性文件
  • -Dtransaction.战略=jotm 作为一个系统酒店

这是一个可能的办法。看到我的 博客 为了更完全的例子。

希望这会有所帮助。

如果您使用的是Spring 2.5,则可以使用<!> lt; tx:jta-transaction-manager / <!> gt;。我没有在JBoss中使用它,但根据 9.8 Spring参考手册中的特定于应用程序服务器的集成。

<tx:jta-transaction-manager/>方法将在几个默认位置查找事务管理器此处列出。如果你的JBoss事务管理器不在其中一个位置,我建议你移动它,如果可能的话,或者在Tomcat中移动它,这样两个容器的TM都在同一个JNDI位置。

只需在此处添加我的经验,这样我就不必再次重新体验这种体验了。

正如bmatthews68,Chochos和这些海报所说,使用在你的Spring bean文件中<tx:jta-transaction-manager/>;它绝对提供了适当的抽象级别,并且没有必要在Spring方面做任何额外的事情。

对于Tomcat,我在默认/共享<Transaction factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60" />文件中声明conf/context.xml,该文件绑定到java:comp/UserTransaction。由于这是Spring搜索的地方之一,您不需要做任何其他事情。

但有一个问题:如果像我一样使用Maven,请确保排除javax.transaction:jta jar上的任何依赖项或将范围设置为provided。否则您将遇到类加载器问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top