我们正在从 JBoss 6 升级到 JBoss 7。我们的应用程序的性质是每个客户都有一个单独的数据库实例,以及一个所有客户通用的核心配置数据库。我们经常有 EJB 代码,它至少会在一次调用中引用核心数据库和单个客户的数据,甚至是一些经过所有客户的通用后台进程。
在 JBoss 6 中,通过使用 NOT_SUPPORTED 事务属性设置方法,可以毫无问题地处理这个问题。但是,JBoss 7 抱怨这个并出现以下错误:
ARJUNA012140:不允许添加多个最后一个资源。试图添加 LastResourceRecord(XAOnePhaseResource(LocalXAResourceImpl@74bec54d[connectionListener=d3ce980 connectionManager=25b47a05 warn=false currentXid=< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a2c28d1:-5a4c1f9a:5046:5046) 1、branch_uid=0:ffff0a2c28d1:-5a4c1f9a:504689c9:14,从属节点名=null,eis_name=unknown eis name >])),但是已经有LastResourceRecord(XAOnePhaseResource(LocalXAResourceImpl@518d0191[connectionListener=1a05d94a connectionManager=135f1cfe warn=false) =< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a2c28d1:-5a4c1f9a:504689c9:11, node_name=1, branch_uid=0:ffff0a2c28d1:-5a4c1f9a:504689c9:13, 从属nodename=null, eis未知的eis名称>]))
如果不对不同数据库的每次调用都包装在单独的 EJB 调用和事务中,我们如何才能解决这个问题。有没有办法在 EJB 调用或类似的东西中真正关闭 JBoss 事务管理?
注意:这个问题在赏金开始后根据额外的发现进行了修改,以加强对特定问题的关注并消除其他被排除的可能性。