错误检索到JBoss到多个数据库连接,即使没有交易(Error retrieving connect

2019-07-31 09:32发布

我们是从升级的JBoss 6到JBoss 7.我们的应用程序的性质有每个客户共同所有的客户一个单独的数据库实例,以及作为核心配置数据库的过程。 我们经常EJB代码,这将至少引用核心数据库以及个人客户在一个呼叫数据,甚至通过所有的客户去一些普通的后台进程。

在JBoss中,6本是由一个NOT_SUPPORTED事务属性设置方法没有问题的处理。 然而,JBoss的7抱怨这个,出现以下错误:

ARJUNA012140:添加多个资源最后是不允许的。 尝试添加LastResourceRecord(XAOnePhaseResource(LocalXAResourceImpl @ 74bec54d [connectionListener = d3ce980的ConnectionManager = 25b47a05警告=假currentXid = <formatId = 131077,gtrid_length = 29,bqual_length = 36,tx_uid = 0:ffff0a2c28d1:-5a4c1f9a:504689c9:11,节点名称= 1,branch_uid = 0:ffff0a2c28d1:-5a4c1f9a:504689c9:14,subordinatenodename = NULL,eis_name =未知EIS名称>])),但已经有LastResourceRecord(XAOnePhaseResource(LocalXAResourceImpl @ 518d0191 [connectionListener = 1a05d94a的ConnectionManager = 135f1cfe警告=假currentXid = <formatId = 131077,gtrid_length = 29,bqual_length = 36,tx_uid = 0:ffff0a2c28d1:-5a4c1f9a:504689c9:11,节点名称= 1,branch_uid = 0:ffff0a2c28d1:-5a4c1f9a:504689c9:13,subordinatenodename = NULL,eis_name =未知EIS名称>]))

我们怎样才能解决这个问题,而无需在一个单独的EJB调用和事务包装每次调用不同的数据库。 有没有办法在一个EJB调用或类似的东西实际上关闭了JBoss事务管理?

注:后基础上额外发现中更加注重具体问题,并删除已排除其他可能性的奖金开始这个问题进行了修改。

Answer 1:

两个建议:

  1. 考虑更新的数据源,以他们的XA当量。 这将解决所有的问题。 我怀疑你在这里阻碍?
  2. 考虑设置com.arjuna.ats.arjuna.allowMultipleLastResources在服务器的conf为true。 这将使你想要的行为,但不幸的是整个应用程序,而不仅仅是方法。

更新:

我不建议让多一相的资源,因为它会削弱你的事务性应用显着。 但是,如果你想这样做在JBoss中7,你需要修改standalone.xml并添加:

<system-properties>
        <property name="com.arjuna.ats.arjuna.allowMultipleLastResources" value="true"/>
</system-properties>

您现在有一个系统,这是不远处一个没有交易。 什么它仍然会做的虽然是如果你试探性结果向您发出警告。

我的建议仍然是,如果你能使用XA数据源。

更新2:

哦,如果有人来一起读这个我想补充一点,如果你可以将你的代码转换成不同的方法,不同的是OP,我会建议重组代码并使用@TransactionAttribute(REQUIRES_NEW)创建并行事务。 这比打开多个1PC,虽然不如打开XA更好。



Answer 2:

好了,事实证明,不像JBoss6,一个NOT_SUPPORTED交易仍然是一个交易,只要检索数据源验证逻辑而言。

解决这个问题的方法是使整个EJB的Bean管理的事务:

@TransactionManagement(TransactionManagementType.BEAN)

这不幸的是限制在某些时候,你宁愿这控制方法,通过法有一定的灵活性,但它不是太痛苦了一种解决方法。



文章来源: Error retrieving connections in jboss to multiple databases even though there is no transaction