没有交易的JTA数据源

时间:2011-02-27 02:00:35

标签: java datasource jta xa

(假设手动入伍和退出资源。)

我有许多支持XA的资源/数据源,我计划对其执行事务更新。此外,一些支持XA的数据源可以单独更新(无需任何其他资源)。

假设我已经使用数据源提交了许多事务,我可以忽略TransactionManager来单方面更新数据源。

我是否只是不启动全局事务并直接在资源本身上提交?假设这是正确的方法,那么我可以随后在没有副作用的事务中登记资源吗?

谢谢,

克里斯

1 个答案:

答案 0 :(得分:3)

XA-resources 支持 XA。不要求。因此,完全可以通过支持XA的资源启动非XA事务,并在本地提交它。

第二个问题不太清楚。将本地事务下的资源添加到XA事务中?不确定它是否是受支持的用例。或者问题是“我可以在提交本地资源后将资源添加到XA事务中吗?”。是的,你可以。

让我们以数据库连接为例。通过连接启动本地事务时,事务ID仅存在于数据库中。提交时,该ID消失,连接返回到原始状态,即不在任何事务中。可以将连接添加到任何XA事务中。

现在,当您启动XA事务时,多个连接(例如,来自群集中的不同JVM)可以共享相同的事务ID,并且从DB的角度来看,它们位于同一事务中。如果在本地事务中有另一个连接,它具有数据库自己的事务ID,那么如何将该连接(以及更重要的是,在其中进行的更改)添加到具有不同ID的现有XA中?这将是一个混乱的业务,我相信不受支持。