2017-08-24 74 views

回答

1

您不能在单个事务中使用多个本地(=非XA)数据源,但可以在全局事务中合并多个XA资源,或让非XA资源参与全局事务(使用1个XA数据源) (参见LLR 1/2)。

可以考虑的事情: 禁用对一个非XA数据源的事务支持或将它们封装在具有@TransactionAttribute(NOT_SUPPORTED)的EJB中以禁用事务。您也可以手动编排交易,但这可能会变得相当麻烦。

GlassFish 3 documentation:(旧版本,但同样适用于新版本)

事务范围本地事务只涉及一个非XA 资源,并要求所有参与的应用程序组件 一个过程中执行。本地事务优化针对资源管理器是特定的 ,对Java EE应用程序透明。

在GlassFish应用服务器,JDBC资源是不可XA如果符合下列条件要么 :

  • 在JDBC连接池的配置,数据源类不 无法实现的javax。 sql.XADataSource接口。

  • 资源类型设置未设置为javax.sql.XADataSource。

    • 一个且唯一一个非XA资源用于:如果满足下列条件保持为真

    事务依旧是局部的。如果使用任何其他非XA 资源,则事务将中止。

  • 没有事务导入或导出。

交易涉及多个资源或多个参与者 过程分布式或全局事务。如果启用了最后一次代理优化,则全局事务 可能涉及一个非XA资源。否则,所有资源必须是XA。默认情况下,use-last-agent-optimization 属性设置为true。有关如何设置此 属性的详细信息,请参阅配置事务服务。

如果在事务中仅使用一个XA资源,则会发生一阶段提交 ,否则该事务将与两阶段提交协议协调。

相关问题