春天JTA配置 - 如何设置事务管理?
-
21-09-2019 - |
题
我们在Spring配置配置我们的Spring的事务为:
<tx:jta-transaction-manager/>
我推测,这意味着春天将自动发现底层的JTA实现。所以,当我们启动的JBoss,我们看到这些消息,而春天的搜索:
[JtaTransactionManager] [ ] No JTA TransactionManager found at fallback JNDI location [java:comp/Tran
sactionManager]
javax.naming.NameNotFoundException: TransactionManager not bound
<<Big stack trace>>
<<More of the same>>
和然后最终看到:
[JtaTransactionManager] [ ] JTA TransactionManager found at fallback JNDI location [java:/Transaction
Manager]
[JtaTransactionManager] [ ] Using JTA UserTransaction: org.jboss.tm.usertx.client.ServerVMClientUserT
ransaction@1f78dde
问题是 - 我们如何修改我们的<tx:jta-transaction-manager/>
标签明确配置java:/Transaction Manager
JTA实现,所以我们避免在日志中的所有这些堆栈跟踪? (I不希望只是改变Log4J日志级别)
更新:我取代<tx:jta-transaction-manager/>
与下面的配置,它似乎工作。我猜这是正常的。
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName" value="java:/TransactionManager"/>
</bean>
解决方案
是,这是正常的。你看到的堆栈跟踪还好吗:<tx:jta-transaction-manager/>
尝试获取来自许多不同的标准位置的事务管理器;每一个失败的JNDI查找,你会看到javax.naming.NameNotFoundException
。
java:/TransactionManager
是其中的JBoss结合由默认;其他servlet容器将默认java:/comp/TransactionManager
,我认为应该是TM的“标准”位置。
从 Spring参考文档:
有关标准方案,包括 的WebLogic,WebSphere和OC4J,考虑 使用便捷
<tx:jta-transaction-manager/>
配置元素。这将 自动检测底层 服务器和选择最好的交易 经理可用的平台。 这意味着你将不必 配置服务器专用适配器 类(如在下文中所讨论的 部分)明确;他们会宁愿 自动选择,与 标准JtaTransactionManager
为 默认故障。
其他提示
一个常见的“错误”是捆绑之类的东西在J2EE组件部署jta.jar
和/或jbossall-client.jar
。仔细检查,请和删除他们,如果是这种情况。