春季JTA配置 - 如何设置事务管理器?

2022-09-04 20:32:28

我们在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

问题是 - 我们如何编辑我们的标签来显式配置JTA实现,以便我们避免日志中的所有这些堆栈跟踪?(我宁愿不只是更改Log4J日志记录级别)<tx:jta-transaction-manager/>java:/Transaction Manager


更新:我用下面的配置替换了,它似乎工作。我猜这没关系?<tx:jta-transaction-manager/>

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

答案 1

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

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

来自春季参考文档

对于标准场景,包括 WebLogic、WebSphere 和 OC4J,请考虑使用方便的配置元素。这将自动检测底层服务器,并为平台选择最佳事务管理器。这意味着您不必显式配置特定于服务器的适配器类(如以下各节所述)。它们将被自动选择,标准作为默认回退。<tx:jta-transaction-manager/>JtaTransactionManager


答案 2

一个常见的“错误”是将类似和/或的东西捆绑在你部署的 J2EE 组件中。请仔细检查,如果是这种情况,请将其删除。jta.jarjbossall-client.jar


推荐