Q1. 我理解当我们需要处理多个数据库时,我们需要使用全局事务。但是从这篇文章http://fogbugz.atomikos.com/default.asp中得知,该作者建议只使用Spring AOP来通知不同的事务管理器(更多>数据源/会话工厂)。请问在什么情况下我们可以只使用这种方法?在什么情况下我们需要XA(全局事务)和Atomikos或JOTM或EJB等技术?
如果您需要在没有事务范围要求的情况下(例如,当一个数据源中的事务失败时,不必在其他数据源中回滚)对数据源执行并行、独立的任务,请使用Pascal的建议或此处的方法(非JTA /非XA /非分布式)
如果您需要跨不同的数据源具有事务范围,例如,如果一个数据源中的回滚应该回滚在同一逻辑事务范围内的另一个数据源中的更改(例如,银行数据库和信用卡数据库进行资金转移,您不能在其中一个数据库中获得减少/增加而在另一个数据库中没有相应的增加/减少),则需要使用JTA事务管理器(XA /分布式)
dataSource
、两个txManager
、两个txAdvice
并定义不同的<aop:advisor/>
元素,其具有不同的'pointcut'
和'advice-ref'
属性值,可以将完全不同的事务配置应用于不同的服务层对象/方法。