(假设手动征募和下架资源。)
我有许多启用 XA 的资源/数据源,我计划对其执行事务更新。此外,一些支持 XA 的数据源可以单独更新(不需要任何其他资源)。
假设我已经使用登记的数据源提交了许多事务,那么我是否可以忽略 TransactionManager 以单方面更新数据源。
我是否根本不启动全局事务并直接在资源本身上提交?假设这是正确的方法,那么我是否可以随后在事务中征用资源而不会产生副作用?
谢谢,
克里斯
(假设手动征募和下架资源。)
我有许多启用 XA 的资源/数据源,我计划对其执行事务更新。此外,一些支持 XA 的数据源可以单独更新(不需要任何其他资源)。
假设我已经使用登记的数据源提交了许多事务,那么我是否可以忽略 TransactionManager 以单方面更新数据源。
我是否根本不启动全局事务并直接在资源本身上提交?假设这是正确的方法,那么我是否可以随后在事务中征用资源而不会产生副作用?
谢谢,
克里斯
XA 资源支持XA。不需要。_ 因此,完全有可能在支持 XA 的资源上启动非 XA 事务,并在本地提交它。
第二个问题不是很清楚。将本地事务下的资源添加到 XA 事务中?不确定它是否是受支持的用例。或者问题是“我可以在提交本地事务后将资源添加到 XA 事务中吗?”。是的你可以。
让我们以数据库连接为例。当通过连接启动本地事务时,事务 ID 仅存在于数据库中。提交后,该 ID 消失,连接恢复到原始状态,即不在任何事务中。可以将连接添加到任何 XA 事务。
现在,当您启动 XA 事务时,多个连接(例如,来自集群中的不同 JVM)可以共享相同的事务 ID,并且从 DB 的角度来看,它们在同一个事务中。如果您在本地事务中有另一个连接,它有自己的数据库事务 ID,您将如何将该连接(以及更重要的是,其中所做的更改)添加到具有不同 ID 的现有 XA 中?这将是一个混乱的业务,我相信不支持。