nonXADatasource与jta =" true"之间的区别是什么?和XADataSource?

时间:2015-01-05 13:55:27

标签: java jboss datasource jta xa

我感到困惑的是,我们可以允许将JTA事务与非XA数据源一起使用。 Link to the documentation。那么XA /非XA数据源之间的区别是什么?我们为什么要使用XA-datasource呢?

2 个答案:

答案 0 :(得分:28)

一般而言,XA事务是可能跨越多个资源的“全局事务”。非XA事务总是只涉及一个资源。

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

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

答案 1 :(得分:12)

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

以下是我的结果。如果我有:

  1. 两个非XA数据源,都有JTA =“true”
  2. 结果:错误“无法在输入元感知对象时登记事务。”

    1. 两个非XA数据源,其中一个JTA =“true”
    2. 结果:他们不会参与分布式事务。每个都将单独提交。

      1. 一个XA和一个非XA,JTA =“false”,
      2. 结果:与#2相同

        1. 一个XA和一个非XA,JTA =“true”。
        2. 结果:有效!

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