Spring JTA配置 - 如何设置TransactionManager?

时间:2009-11-23 14:41:42

标签: java spring jboss jta spring-transactions

我们将Spring配置中的Spring事务配置为:

<tx:jta-transaction-manager/>

我收集这意味着Spring会自动发现底层的JTA实现。因此,当我们启动JBoss时,我们会在Spring搜索时看到这些消息:

[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实现,以便我们避免日志中的所有这些堆栈跟踪? (我不想只改变Log4J日志记录级别)


更新:我用以下配置替换了<tx:jta-transaction-manager/>,它似乎有效..我猜这是好的吗?

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="transactionManagerName" value="java:/TransactionManager"/>
</bean>

2 个答案:

答案 0 :(得分:13)

是的,没关系。您看到的堆栈跟踪也没问题:<tx:jta-transaction-manager/>尝试从多个不同的标准位置获取事务管理器;对于每次失败的JNDI查找,您都会看到javax.naming.NameNotFoundException

java:/TransactionManager是JBoss默认绑定的地方;其他servlet容器将默认为java:/comp/TransactionManager,我认为它应该是TM的“标准”位置。

来自Spring reference documentation

  

对于标准方案,包括   WebLogic,WebSphere和OC4J,考虑一下   使用方便   <tx:jta-transaction-manager/>   配置元素。这将   自动检测底层证券   服务器并选择最佳交易   经理可用于该平台。   这意味着你不必   配置特定于服务器的适配器   课程(如下所述)   部分)明确;他们宁愿   随意选择   标准JtaTransactionManager为   默认回退。

答案 1 :(得分:4)

常见的“错误”是将jta.jar和/或jbossall-client.jar之类的内容捆绑在您部署的J2EE组件中。如果是这种情况,请仔细检查并删除它们。