【问题标题】:when to use global transaction Or use spring aop for transaction何时使用全局事务或使用spring aop进行事务
【发布时间】:2011-01-02 08:12:28
【问题描述】:

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

【问题讨论】:

  • 您确定您发布的链接正确吗?

标签: java hibernate jta jotm atomikos


【解决方案1】:

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

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

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

希望这会使图片更清晰(如果我过度简化或完全错误,我愿意接受 cmets)

【讨论】:

  • @ehrann,你很有帮助
【解决方案2】:

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

任务可以是针对datasource1 datasource2的一组sql命令。

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

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

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

详见9.5.4. Configuring different transactional semantics for different beans部分。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2013-07-30
    • 2010-11-03
    相关资源
    最近更新 更多