"Multiple last resources have been added to the current transaction" 尽管使用 XA 驱动程序仍发出警告

"Multiple last resources have been added to the current transaction" warning despite using XA driver

我在 JBoss 下的 JBPMM/PAM 应用程序出现间歇性乐观锁异常,所以我想确保我的应用程序的

Multiple last resources have been added to the current transaction

警告是无害的。尽管使用 XA 驱动程序和

我还是收到了这些警告
<property name="com.arjuna.ats.arjuna.allowMultipleLastResources" value="true"/>

我的应用程序使用多个数据源,通过 Hibernate 和 JPA 指向不同的数据库。但是,用于查询我们的 SQL 服务器数据库的 XA 驱动程序似乎应该允许分布式事务——那么为什么 Arjuna 仍然发出警告?我可以做一个简单的配置更改来避免这些警告吗?

<drivers>
       <driver name="sqlserver" module="com.microsoft.jdbc">
             <xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerXADataSource</xa-datasource-class>
       </driver>
</drivers> 

这里的原因是您正在使用两个数据源,它们是一个全局事务的一部分 - 即,它们将是两个不同的数据库。 数据源(很可能)配置为标准数据源而不是 XA 数据源。只有 XA 数据源能够正确参与 XA 事务(具有多个参与者的事务 - https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.4/html-single/managing_transactions_on_jboss_eap/index#xa_versus_non_xa_transactions)。

MSSQL 实现了 XA 事务,因此您只需更改数据源配置即可配置为 XA 数据源。 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.4/html-single/configuration_guide/index#example_microsoft_sqlserver_xa_datasource