java – 即使没有事务也可以将jboss中的连接检索到多个数据库

前端之家收集整理的这篇文章主要介绍了java – 即使没有事务也可以将jboss中的连接检索到多个数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们正在从JBoss 6升级到JBoss 7.我们的应用程序的性质每个客户都有一个单独的数据库实例,以及所有客户通用的核心配置数据库.我们经常有EJB代码,至少在一个调用中引用核心数据库加上个别客户的数据,甚至通过所有客户的一些后台进程.

在JBoss 6中,这是通过使用NOT_SUPPORTED事务属性设置方法来处理的.但是,JBoss 7抱怨有以下错误

ARJUNA012140: Adding multiple last resources is disallowed. Trying to
add
LastResourceRecord(XAOnePhaseResource(LocalXAResourceImpl@74bec54d[connectionListener=d3ce980
connectionManager=25b47a05 warned=false currentXid=< formatId=131077,
gtrid_length=29,bqual_length=36,
tx_uid=0:ffff0a2c28d1:-5a4c1f9a:504689c9:11,node_name=1,
branch_uid=0:ffff0a2c28d1:-5a4c1f9a:504689c9:14,
subordinatenodename=null,eis_name=unknown eis name >])),but already
have
LastResourceRecord(XAOnePhaseResource(LocalXAResourceImpl@518d0191[connectionListener=1a05d94a
connectionManager=135f1cfe warned=false currentXid=< formatId=131077,
branch_uid=0:ffff0a2c28d1:-5a4c1f9a:504689c9:13,eis_name=unknown eis name >]))

我们如何解决这个问题,而不必在单独的EJB调用和事务中将每个调用包裹到不同的数据库.有没有办法在EJB调用或类似的事情中实际关闭JBoss事务管理?

注意:在基于额外发现的奖励开始之后,此问题已被修改,以便将重点放在具体问题上,并删除被排除的其他可能性.

解决方法

两个建议:

考虑将数据源更新为XA等价物.这将解决您的所有问题.我怀疑你在这里受到阻碍?
>考虑在服务器conf中设置com.arjuna.ats.arjuna.allowMultipleLastResources为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.

猜你在找的Java相关文章