多个数据源的事务管理

时间:2013-11-19 07:46:02

标签: java transactions ejb

如果我们使用数据源(名为'ABC')执行事务,并且在该事务中我们需要与其他数据源(名为'DEF')不同的连接对象

所以我们目前正在做的是,我们在EJB方法上设置了@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)。在同一个方法中,我们编写了从其他数据源(名为“DEF”)获取新连接的代码。

我们这样做的原因是'正在进行的事务是使用来自名为'ABC'的数据源的连接,但是现在我们需要在其他事务中执行一些其他操作,因此我们需要来自其他数据源的连接'DEF',这就是为什么我们需要通过说NOT_SUPPORTED暂停第一个事务并对新连接执行必要的操作然后再次恢复相同的旧事务'

请验证我的理解。

3 个答案:

答案 0 :(得分:0)

如果我理解你的情况,

TransactionAttributeType.NOT_SUPPORTED不是你需要的。

您需要使用TransactionAttributeType.REQUIRES_NEW注释该方法。这将暂停外部事务并创建一个新的独立事务。

答案 1 :(得分:0)

你的推理是合理的。如果您使用Spring,则有一种更简单的方法:

@Transactional( "DEF", propagation: Propagation.NESTED )

这将创建始终使用TransactionManager DEF

创建新交易

不幸的是,EJB标准不支持NESTED

答案 2 :(得分:0)

交易可分为两类

  1. 本地交易 - 单个数据库中的单个工作单元。
  2. 全球交易---单个工作单位处理多个数据库。
  3. 有关更多详细信息,请参阅J2EE在线文档..

    干杯!