ARJUNA012140:不允许添加多个最后资源

时间:2019-06-18 14:03:11

标签: java transactions wildfly jta

我有2个数据源,在一个方法中,我需要从2个数据库中读写。数据库是PostgreSQL,我的EAR应用程序在wildfly-16上运行。

我无法以相同的方式使用2个数据库连接

好吧,我知道是因为系统无法跨其他数据库管理事务。

所以我拆分了ejb中的方法:

@TransactionAttribute(TransactionAttributeType.NEVER)
public Response mainMethod(String parameter) {
   method1();
   method2()
}

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
private void method1(){
    ...write on database 1...
}

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
private void method2(){
    ...write on database 2...
}

为什么我仍然遇到相同的错误?通话不是由两个不同的事务管理的吗?

ARJUNA012140: Adding multiple last resources is disallowed. 
Trying to add LastResourceRecord(XAOnePhaseResource(LocalXAResourceImpl@594d9ba8[connectionListener=677e78 connectionManager=2a095926 warned=false currentXid=< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffffc0a86e69:-9dc6f57:5d08b51e:f58, node_name=1, branch_uid=0:ffffc0a86e69:-9dc6f57:5d08b51e:f8a, subordinatenodename=null, eis_name=java:/jboss/datasource/db1 > productName=PostgreSQL productVersion=10.8 (Ubuntu 10.8-0ubuntu0.18.04.1) jndiName=java:/jboss/datasource/db1])), 
but already have LastResourceRecord(XAOnePhaseResource(LocalXAResourceImpl@39fc2dc2[connectionListener=3724f31c connectionManager=39a995fb warned=false currentXid=< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffffc0a86e69:-9dc6f57:5d08b51e:f58, node_name=1, branch_uid=0:ffffc0a86e69:-9dc6f57:5d08b51e:f64, subordinatenodename=null, eis_name=java:/jboss/datasource/db2 > productName=PostgreSQL productVersion=10.8 (Ubuntu 10.8-0ubuntu0.18.04.1) jndiName=java:/jboss/datasource/db2]))

2 个答案:

答案 0 :(得分:1)

注释使用了动态代理,因此不适用于私有方法或内部调用的公共方法(在this上)。您必须在不同的EJB中声明两个方法。

否则,您的错误,系统可以使用XA管理跨不同资源的交易。

只需将您的数据源之一切换到xa-datasource,就可以摆脱此问题。请注意,由于LLRTO,您在XA事务中可以有一个非xa数据源,但不能有两个(这就是arjuna错误的意思)。

答案 1 :(得分:-1)

嘿,万一有人在我这边遇到这个错误,我忘了关闭连接

finally {
    call.closeAll();
}

这导致了错误:

Could not get a connection from the data source , Adding multiple last resources is disallowed.Current resource is org.jboss.resource.connectionmanager.TxConnectionManager$LocalXAResource@17d3bab6