spring事务----控制事务成功失败(Transaction marked as rollback)

  问题:   

            项目采用是三层架构,在service层配置了spring的事务,项目中出现了A类的service层的某个方法中调用B类service层的对象方法,然而部署在tomcat中,执行操作,抛出“Transaction marked as rollback”异常。

  解决办法:

           原因就是:B类中方法被A类中的方法调用后,B类方法的事务已经提交,但是spring却把B类方法的事务标记为rollback-only,A类方法的外层事务管理器再commit时就会抛此异常,解决方法是添加红色标记的代码。如下:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
        <property name="globalRollbackOnParticipationFailure" value="false" />
    </bean>

  原理:
         在 org.springframework.transaction.support.AbstractPlatformTransactionManager 中有个叫isGlobalRollbackOnParticipationFailure的参数,默认是true.

         如果isGlobalRollbackOnParticipationFailure为false,则会让主事务决定回滚,如果当遇到exception加入事务失败时,调用者能继续在事务内决定是回滚还是继续。

         参考文章:http://jsczxy2.iteye.com/blog/1773795

 

posted @ 2015-11-16 17:51  园中菜鸟  阅读(1144)  评论(0)    收藏  举报