(假设手动登记和取消资源。)
我有许多启用 XA 的资源/数据源,我计划对其执行事务更新。此外,一些支持 XA 的数据源可以单独更新(不需要任何其他资源)。
假设我已经使用登记的数据源提交了多个事务,那么我可以忽略 TransactionManager 对数据源的单方面更新吗?
我是否只是不启动全局事务并直接提交资源本身?假设这是正确的方法,我可以随后在事务中登记资源而不会产生副作用吗?
Thanks,
Chris
XA资源supportXA。不是require。因此,完全可以通过支持 XA 的资源启动非 XA 事务,并在本地提交。
第二个问题不太清楚。将本地事务下的资源添加到XA事务中?不确定这是受支持的用例。或者问题是“我可以在提交本地事务后将资源添加到 XA 事务吗?”。是的你可以。
我们以数据库连接为例。当通过连接启动本地事务时,事务 ID 仅存在于数据库中。提交后,该 ID 消失,并且连接返回到原始状态,即不在任何事务内。连接可以添加到任何 XA 事务中。
现在,当您启动 XA 事务时,多个连接(例如,来自集群中的不同 JVM)可以共享相同的事务 ID,并且从 DB 的角度来看,它们位于同一事务内。如果本地事务中有另一个连接,该连接有自己的数据库事务 ID,那么如何将该连接(更重要的是,其中所做的更改)添加到具有不同 ID 的现有 XA 中?这将是一件混乱的事情,而且我相信不会得到支持。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)