带有 jta=“true” 的非XADatasource 和 XADataSource 之间有什么区别?

2022-09-02 02:42:12

我对这样一个事实感到困惑,即我们可以允许将JTA事务与非XA数据源一起使用。链接到文档。那么 XA/非 XA 数据源之间有什么区别呢?我们为什么要使用XA数据源?


答案 1

XA 事务,在最一般的术语中,是可能跨多个资源的“全局事务”。非 XA 事务始终只涉及一个资源。

XA 事务涉及一个协调事务管理器,其中一个或多个数据库(或其他资源,如 JMS)都参与到单个全局事务中。非 XA 事务没有事务协调器,单个资源自行执行其所有事务工作(这有时称为本地事务)。

注意:上面的解释取自:theserverside(Mike Spille)

jta=“true”,事务自动提交。


答案 2

我自己也想知道这个问题(在非XA数据源中使用JTA“选项),所以我测试了几种配置。我有一个连接到两个MySQL服务器的分布式事务。

这是我的结果。如果我有:

  1. 两个非 XA 数据源,都具有 JTA=“true”

结果:错误“无法登记进入元感知对象的事务”。

  1. 两个非 XA 数据源,其中一个 JTA=“true”

结果:他们不会参与分布式事务。每个都将单独提交。

  1. 一个 XA 和一个非 XA,JTA=“false”,

结果:与 #2 相同

  1. 一个 XA 和一个非 XA,JTA=“true”。

结果:有效!

从这些来看,“使用JTA”选项表明如果存在XA数据源,它是否会参与分布式事务。


推荐