UserTransaction ut=查找....
ut.beginTransaction();
saveToFooDB();
statelessEjb.transactionSupportedMethod(); //将一些内容保存到 Foo DB
saveToFooDB();
ut.commit();
如果我执行上述操作,那么我的理解是它不是 XA 事务,因为它不跨越多个资源(例如 DB 加 JMS)。我的理解正确吗?
数据源可以配置两种:
-
XA:这些数据源可以参与分布式事务
-
Local:也称为非XA,它们不能参与分布式事务
The UserTransaction
JTA 规范中定义了如何协调分布式事务中的参与者。
然而,实现 JTA 规范的应用程序服务器可以自由地进行大量优化。其中之一是last-agent-optimization
,这允许分布式事务的最后一个参与者Local。然后对最后的参与者进行定期提交。如果只有一名参与者,那么情况总是如此。
简而言之:
- 如果您有多个参与者,则需要使用 XA 和 2 阶段提交
- 如果只有一个参与者,大多数应用程序服务器都支持本地数据源,并且不使用完整的两阶段提交协议。
对于玻璃鱼,请参阅:
-
最后代理优化 http://docs.sun.com/app/docs/doc/820-4496/beanp?a=view
- 配置 JDBC 数据源 http://docs.sun.com/app/docs/doc/820-4335/ablih?a=view
EDIT
glassfish“交易范围”款文档 http://docs.sun.com/app/docs/doc/819-3672/beanm?a=view比我解释得更好。我想所有应用程序服务器都是一样的。
本地事务只涉及一个
非 XA 资源并要求所有
参与的应用程序组件
在一个进程内执行。当地的
交易优化是具体的
到资源管理器并且是
对 Java EE 透明
应用。
在应用程序服务器中,有一个 JDBC
如果资源满足以下任一条件,则该资源是非 XA
以下标准:
事务仍然是本地的,如果
以下条件仍然成立:
- 使用一个且仅一个非 XA 资源。如果有任何额外的非 XA
资源被使用,事务是
中止了。
- 不发生事务导入或导出。
交易涉及多个
资源或多参与者
流程是分布式的或全局的
交易。全局交易可以
如果最后涉及一个非 XA 资源
代理优化已启用。
否则,所有资源都必须是 XA。
最后使用代理优化
属性默认设置为 true。
有关如何设置此选项的详细信息
属性,请参阅配置
交易服务。
如果只使用一个 XA 资源
事务,发生一阶段提交,
否则交易是
与两阶段提交协调
协议。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)