具有Bitronix jndi查找失败的Spring JTA事务管理器

时间:2012-12-04 12:29:26

标签: spring jta

我为在Tomcat 7上运行的Bitronix配置了一个spring JTA事务管理器。事务管理器正常启动,应用程序运行正常。然而,我得到了很多调试消息,说明

在后备JNDI位置找不到JTA TransactionManager [java:comp / TransactionManager] 在后备JNDI位置找不到JTA TransactionManager [java:pm / TransactionManager] 在后备JNDI位置[java:appserver / TransactionManager]

中找不到JTA TransactionManager

等。

据我所知,这是JtaTransactionManager扫描已知的jndi位置,这不是错误,而是调试异常。以下是我的事务管理器配置

<bean id="BitronixTransactionManager" factory-method="getTransactionManager" class="bitronix.tm.TransactionManagerServices" 
     destroy-method="shutdown" /> 

和jta事务管理器

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="autodetectTransactionManager" value="false"/>
<property name="transactionManager" ref="BitronixTransactionManager" />    
<property name="userTransaction" ref="BitronixTransactionManager" />

我认为将autodetectTransactionManager值设置为false会阻止此扫描和生成的调试异常,但似乎此设置无效。

我还尝试使用以下属性为transactionManager设置jndi位置。

<property name="transactionManagerName" value="java:comp/TransactionManager"/>
<property name="userTransactionName" value="java:comp/UserTransaction"/> 

我正在使用jta 1.1并且还为TransactionSynchronizationRegistry获取相同的查找消息:

DEBUG [main] JtaTransactionManager.findTransactionSynchronizationRegistry(146)|在默认JNDI位置找不到JTA TransactionSynchronizationRegistry [java:comp / TransactionSynchronizationRegistry]

我真的很想理解这一点,而不仅仅是用我的Log4J

来过滤掉它

1 个答案:

答案 0 :(得分:0)

问题可能是在Tomcat中,默认的jndi位置在java:comp / env中。所以你应该做

<property name="transactionManagerName" value="java:comp/env/TransactionManager"/>
<property name="transactionSynchronizationRegistryName" value="java:comp/env/TransactionSynchronizationRegistry"/>
<property name="userTransactionName" value="java:comp/env/UserTransaction"/>