我想做一个分布式事务。我有3个启用了JTS(事务管理器)的应用服务器。 每个应用服务器都连接到数据库。 一个应用服务器调用其他应用服务器的2个EJB。我想要执行所有调用 在交易中。
问题:应用服务器(JBoss)数据源应该是本地还是xa?
所有应用程序服务器都有一个事务管理器。所有TM都与JTS(OTS)互相交谈。所以他们不直接连接到远程dbs。那么为什么远程dbs应该是XA?
答案 0 :(得分:1)
您必须使用容器管理的事务,并且必须使用 XA数据源来获取分布式事务。
因此,第一个应用程序服务器创建全局事务,事务上下文传播到其他应用程序服务器的EJB中(如果是bean管理的事务,则不会传播它)。在这些方法中,他们在XA数据源中的连接在全局事务中登记。
当第一个应用程序服务器中的方法完成时,全局事务提交所有工作单元(在所有应用程序服务器中)。如果出现错误,则全局事务回滚,因此所有工作单元都将被丢弃。
因此JTS不会相互“交谈”,全局事务仅由第一个应用程序服务器协调。
答案 1 :(得分:0)
如果所有调用都应该执行或者什么都不执行,则应使用xa-datasources,否则回滚其中一个组件将不会强制回滚其他方。