Java Arjuna01240:不允许添加多个最后的资源
我有2个数据源,在一个方法中,我需要从2个数据库中写入和读取数据。数据库是PostgreSQL,我的EAR应用程序运行在wildfly-16上 我不能用相同的方法使用2个数据库连接 好的,我知道这一点,因为系统无法跨不同的数据库管理事务 因此,我在ejb中拆分了方法:Java Arjuna01240:不允许添加多个最后的资源,java,transactions,wildfly,jta,Java,Transactions,Wildfly,Jta,我有2个数据源,在一个方法中,我需要从2个数据库中写入和读取数据。数据库是PostgreSQL,我的EAR应用程序运行在wildfly-16上 我不能用相同的方法使用2个数据库连接 好的,我知道这一点,因为系统无法跨不同的数据库管理事务 因此,我在ejb中拆分了方法: @TransactionAttribute(TransactionAttributeType.NEVER) public Response mainMethod(String parameter) { method1();
@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]))
Arjuna01240:不允许添加多个最后的资源。
正在尝试添加LastResourceRecord(XAOnePhaseResource(LocalXAResourceImpl@594d9ba8[connectionListener=677e78 connectionManager=2a095926 Warning=false currentXid=productName=PostgreSQL产品版本=10.8(Ubuntu 10.8-0ubuntu0.18.04.1)jndiName=java:/jboss/datasource/db2]))
注释在封面下使用动态代理,因此不适用于私有方法,也不适用于内部调用的公共方法(在上)。您必须在不同的EJB中声明这两种方法
否则,关于您的错误,系统可以使用XA跨不同资源管理事务
只需将一个数据源切换到xa数据源,就可以解决问题。请注意,在xa事务中可以有一个非xa数据源,这要归功于,但不是两个(这是arjuna错误的含义)。可能的重复