Spring JTA配置 - 如何设置TransactionManager?

Mar*_*eon 13 java jboss spring jta spring-transactions

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

<tx:jta-transaction-manager/>
Run Code Online (Sandbox Code Playgroud)

我收集这意味着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>>
Run Code Online (Sandbox Code Playgroud)

然后最终看到:

[JtaTransactionManager] [ ] JTA TransactionManager found at fallback JNDI location [java:/Transaction
Manager]
[JtaTransactionManager] [ ] Using JTA UserTransaction: org.jboss.tm.usertx.client.ServerVMClientUserT
ransaction@1f78dde
Run Code Online (Sandbox Code Playgroud)

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


更新:我<tx:jta-transaction-manager/>用下面的配置替换它似乎工作..我猜这是好的?

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="transactionManagerName" value="java:/TransactionManager"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

Hen*_*ing 13

是的,没关系.您看到的堆栈跟踪也没问题:<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作为默认回退.