0

我想做一个分布式事务。我有 3 个启用了 JTS(事务管理器)的应用程序服务器。每个应用服务器都连接到一个数据库。一个应用服务器调用其他应用服务器的 2 个 EJB。我希望在事务中执行所有调用。

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

所有应用程序服务器都有一个事务管理器。所有的 TM 都用 JTS (OTS) 互相交谈。所以他们不直接连接到远程数据库。那么为什么远程 dbs 应该是 XA 呢?

4

2 回答 2

1

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

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

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

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

于 2013-09-25T08:51:39.473 回答
0

如果所有调用都应该执行或不执行,则应使用 xa-datasources,否则其中一个组件的回滚不会强制其他方回滚。

于 2013-09-24T11:16:26.620 回答