我们可以在存储库层中使用One XA Resource和Two Non XA资源

时间:2017-08-24 07:00:27

标签: java jpa eclipselink

我们可以在同一个存储库类中使用xa和非xa资源的组合。 如果可以,任何人都可以解释它将如何表现以及交易将如何运作。目前我们在我们的存储库中使用2 xa资源和2个非xa资源。我们正在使用glassfish和eclipselink。 方法有什么问题。

1 个答案:

答案 0 :(得分:1)

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

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

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

  

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

     

在GlassFish Server中,如果JDBC资源满足,则该资源是非XA的   以下标准:

     
      
  • 在JDBC连接池配置中,DataSource类可以   没有实现javax.sql.XADataSource接口。

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

  •   
     

如果满足以下条件,则交易仍然是本地的:

     
      
  • 使用了一个且仅有一个非XA资源。如果有任何额外的非XA   使用资源,中止交易。

  •   
  • 不会发生任何事务导入或导出。

  •   
     

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

     

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