最近在做一个分布式事务的项目,遇到了这样一个问题:
在一个类AManager中,有两个方法A,B 在A中循环调用B(B分别操作oracle和mysql),在B上我声明了@Transactional(propagation=Propagation.REQUIRES_NEW) 可当B抛出异常被A捕获后数据不能回滚,但同样的代码将B拆分到另一个类中就能回滚,请问哪位高人知道这是为什么?(查理很多资料没有提及这方面的)spring分布式事务

解决方案 »

  1.   

    首先要确定你的事务模式是什么?
    分布式要JTA模式才行
      

  2.   

    1.我用的Atomikos JTA的开源实现,用spring声明式事务;
    2.当A方法加@Transactional(propagation=Propagation.REQUIRED) 
      而B方法加@Transactional(propagation=Propagation.REQUIRES_NEW)
      时,如果第一条数据在B方法中抛出异常A捕获后,循环再调用B方法操作数据库时出现不能提交事务问题;
    3.当A方法不加事务而B方法加@Transactional(propagation=Propagation.REQUIRES_NEW)
      时B方法抛出异常A捕获后事务不发生回滚;
    请问有对事务有深刻理解的大侠肯帮帮忙吗?