1

我为在 Tomcat 7 上运行的 Bitronix 配置了 Spring JTA 事务管理器。事务管理器正常启动并且应用程序运行良好。但是,我收到很多调试消息,说明

在回退 JNDI 位置 [java:comp/TransactionManager] 未找到 JTA TransactionManager 在回退 JNDI 位置 [java:pm/TransactionManager] 在回退 JNDI 位置未找到 JTA TransactionManager [java:appserver/TransactionManager]

ETC..

我知道这是 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 获得相同的查找消息:

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

我真的很想了解这一点,而不仅仅是用我的 Log4J 过滤掉

4

1 回答 1

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"/>
于 2013-07-23T16:12:34.663 回答