带 jta="true" 的 nonXADatasource 和 XADataSource 有什么区别?
What's the difference between nonXADatasource with jta="true" and XADataSource?
我对我们可以允许将 JTA 事务与非 XA 数据源一起使用这一事实感到困惑。 Link to the documentation。那么 XA/non-XA 数据源之间有什么区别呢?我们为什么要使用 XA 数据源?
An XA transaction, in the most general terms, is a "global
transaction" that may span multiple resources. A non-XA transaction
always involves just one resource.
An XA transaction involves a coordinating transaction manager, with
one or more databases (or other resources, like JMS) all involved in a
single global transaction. Non-XA transactions have no transaction
coordinator, and a single resource is doing all its transaction work
itself (this is sometimes called local transactions).
注:以上解释摘自:theserverside (Mike Spille)
jta="true",事务自动提交。
我自己也在想这个问题("use JTA" 非 XA 数据源中的选项)所以我测试了几种配置。我有一个分布式事务连接到两个 MySQL 服务器。
这是我的结果。如果我有:
- 两个非XA数据源,都有JTA="true"
结果:错误"Could not enlist in transaction on entering meta-aware object."
- 两个非 XA 数据源,一个 JTA="true"
结果:他们不会参与分布式事务。每个将单独提交。
- 一个 XA 和一个带 JTA 的非 XA="false",
结果:同#2
- 一个 XA 和一个带有 JTA 的非 XA="true"。
结果:有效!
从这些看来,"use JTA" 选项表明如果存在 XA 数据源,它是否将参与分布式事务。
我对我们可以允许将 JTA 事务与非 XA 数据源一起使用这一事实感到困惑。 Link to the documentation。那么 XA/non-XA 数据源之间有什么区别呢?我们为什么要使用 XA 数据源?
An XA transaction, in the most general terms, is a "global transaction" that may span multiple resources. A non-XA transaction always involves just one resource.
An XA transaction involves a coordinating transaction manager, with one or more databases (or other resources, like JMS) all involved in a single global transaction. Non-XA transactions have no transaction coordinator, and a single resource is doing all its transaction work itself (this is sometimes called local transactions).
注:以上解释摘自:theserverside (Mike Spille)
jta="true",事务自动提交。
我自己也在想这个问题("use JTA" 非 XA 数据源中的选项)所以我测试了几种配置。我有一个分布式事务连接到两个 MySQL 服务器。
这是我的结果。如果我有:
- 两个非XA数据源,都有JTA="true"
结果:错误"Could not enlist in transaction on entering meta-aware object."
- 两个非 XA 数据源,一个 JTA="true"
结果:他们不会参与分布式事务。每个将单独提交。
- 一个 XA 和一个带 JTA 的非 XA="false",
结果:同#2
- 一个 XA 和一个带有 JTA 的非 XA="true"。
结果:有效!
从这些看来,"use JTA" 选项表明如果存在 XA 数据源,它是否将参与分布式事务。