没有事务的 JTA 数据源

发布于 2024-10-19 09:46:57 字数 252 浏览 5 评论 0原文

(假设手动登记和取消列出资源。)

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

假设我已经使用登记的数据源提交了多个事务,那么我可以忽略 TransactionManager 对数据源的单方面更新吗?

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

谢谢,

克里斯

(Assuming manual enlistment and delistment of resources.)

I have a number of XA enabled resources/datasource for which I plan to perform transactional updates. Additionally, some of the XA-enabled datasources can be updated in isolation (without requiring any other resource).

Assuming I have already committed a number of transactions with a datasource enlisted, can I then ignore the TransactionManager for unilateral updates to the datasource.

Do I simply not start a global transaction and commit directly on the resource itself? Assuming this is the correct approach, can I then subsequently enlist the resource in a transaction without side-effect?

Thanks,

Chris

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

万劫不复 2024-10-26 09:46:57

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

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

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

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

XA-resources support XA. Not require. Therefore it is totally possible to start a non-XA transaction over an XA-supporting resource, and commit it locally.

The second question is not quite clear. Add a resource under local transaction into XA transaction? Not sure it is a supported use-case. Or the question is "can I add the resource to an XA transaction after I have committed the local one?". Yes, you can.

Let's take an example of database connection for instance. When a local transaction is started over the connection, the transaction ID exists within the database only. When committed, that ID is gone, and connection is back to the original state, i.e. not within any transaction. Connection can be added to any XA transaction.

Now, when you start an XA transaction, multiple connections (e.g. from different JVMs in a cluster) can share the same transaction ID, and from DB point of view they are within the same transaction. If you have another connection in a local transaction, which has it's own transaction ID for the database, how would you add that connection (and, more importantly, the changes made within it) into the existing XA with a different ID? It would be a messy business, and I believe is not supported.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文