Jakarta ee JTS的JBoss;XA还是本地数据源?

Jakarta ee JTS的JBoss;XA还是本地数据源?,jakarta-ee,jboss,Jakarta Ee,Jboss,我想做一个分布式事务。我有3台启用了JTS(事务管理器)的应用服务器。 每个应用服务器都连接到一个数据库。 一个应用服务器调用其他应用服务器的两个EJB。我要所有的电话都被执行 在交易中 问题是:应用服务器(JBoss)的数据源应该是本地的还是xa的 所有应用服务器都有一个事务管理器。所有TM与JTS(OTS)相互通话。因此,它们不直接连接到远程数据库。那么为什么远程dbs应该是XA呢?如果所有调用都应该执行,或者什么都不执行,那么您应该使用XA数据源,否则其中一个组件中的回滚不会强制其他方回滚

我想做一个分布式事务。我有3台启用了JTS(事务管理器)的应用服务器。 每个应用服务器都连接到一个数据库。 一个应用服务器调用其他应用服务器的两个EJB。我要所有的电话都被执行 在交易中

问题是:应用服务器(JBoss)的数据源应该是本地的还是xa的


所有应用服务器都有一个事务管理器。所有TM与JTS(OTS)相互通话。因此,它们不直接连接到远程数据库。那么为什么远程dbs应该是XA呢?

如果所有调用都应该执行,或者什么都不执行,那么您应该使用XA数据源,否则其中一个组件中的回滚不会强制其他方回滚

必须使用容器管理的事务,并且必须使用XA数据源来获取分布式事务

因此,第一个应用程序服务器创建全局事务,事务上下文被传播到其他应用程序服务器的EJB中(在bean管理的事务中不会传播)。在这些方法中,它们与XA数据源的连接在全局事务中登记

当第一个应用服务器中的方法完成时,全局事务提交所有工作单元(在所有应用服务器中)。如果出现错误,全局事务将被回滚,因此所有工作单元都将被丢弃


因此,JT不会相互“交谈”,全局事务仅由第一个应用服务器协调。

除第一个应用服务器外,应用服务器上是否需要JTS事务管理器?(或者他们可能只是JTA吗?)从逻辑的角度来看,JTS只在AFAIK的第一个上需要。我不能谈论实际的实现,可能远程系统上真正的第二阶段提交是由本地JTS代表主要JTS完成的。所有节点上可能都需要JTA,因为容器将隐式使用它在全局事务中登记XA资源。谢谢您的回答。我正在读JTS规范[链接](),第页。11,但它没有说明事务管理器如何连接到应用程序服务器(它只是说反之亦然)。我猜它使用JTS(OTS)与另一个应用服务器的事务管理器通信。