3

Q1。我明白当我们需要处理多个数据库时,我们需要使用全局事务。但从这篇文章 http://fogbugz.atomikos.com/default.asp 。该人建议只使用spring aop就不同的事务管理器(更多>数据源/会话工厂)提供建议。谁能解释在什么样的情况下我们可以使用这种方法在什么样的情况下我们需要 XA(全局事务)与 atomikos 或 jotm 或 ejb..etc

4

2 回答 2

4

我认为 Pascal 已经彻底回答了您的问题,但我想尝试简化/总结它。

  • 如果您需要在没有事务范围要求的数据源上执行并行、独立的任务(例如,如果一个事务在一个数据源中失败,则不必在其他数据源中回滚),请使用 Pascal 的建议或http://fogbugz中的方法.atomikos.com/default.asp?community.6.596.2(例如非 JTA / 非 XA / 非分布式)

  • 如果您需要跨不同数据源的事务范围,例如,如果一个数据源中的回滚应该回滚同一逻辑事务范围下的另一个数据源中的更改,(例如银行数据库和信用卡数据库进行资金转移,您无法获得decreese / increese 在一个没有相应的 increese / decreese 在另一个)你需要一个 JTA 事务管理器(XA / 分布式)

希望这会使图片更清晰(如果我过度简化或完全错误,我愿意发表评论)

于 2010-01-19T11:27:06.620 回答
3

如果您指的是此消息http://fogbugz.atomikos.com/default.asp?community.6.596.2,那么 OP 问题中的重要部分是:

该任务可以是针对 datasource1datasource2 的一组 sql 命令。

换句话说,OP 不会征用多个事务资源,他将使用其中一个(并明确写道他并不真正需要 XA 支持)。因此,他实际上并不需要全局事务支持,他可以只使用本地事务,并且对于他的用例来说,使用 J2EE 事务管理器并不是强制性的。

这就是答案所暗示的:使用 Atomikos 不是必需的,而且可能是矫枉过正。

使用 two dataSource, two txManager, twotxAdvice并定义 具有不同和属性值的不同<aop:advisor/> 元素将允许将完全不同的事务配置应用于不同的服务层对象/方法。'pointcut''advice-ref'

请参阅第9.5.4 节。为不同的bean配置不同的事务语义以获得细节。

但是,如果您需要使用多个事务资源(通常是关系数据库和消息队列),那么您需要全局事务支持,这意味着 J2EE 事务管理器(由 J2EE 应用程序服务器提供或独立的,如 Atomikos、JBossTS、JOTM 等)。

于 2010-01-19T04:39:37.753 回答