Spring框架学习[Spring事务处理的实现](五)

2014-11-24 03:00:34 · 作者: · 浏览: 13
wTransaction()) { if (status.isDebug()) { logger.debug("Initiating transaction rollback"); } //回滚处理,由具体的事务处理器实现 doRollback(status); } //如果在当前事务中没有新建事务 else if (status.hasTransaction()) { //如果当前事务状态为本地回滚,或全局回滚失败 if (status.isLocalRollbackOnly() || isGlobalRollbackOnParticipationFailure()) { if (status.isDebug()) { logger.debug( "Participating transaction failed - marking existing transaction as rollback-only"); } //设置当前事务状态为回滚 doSetRollbackOnly(status); } //当前事务状态没有设置为本地回滚,且没有产生全局回滚失败,则//由线程中的前一个事务来处理回滚,这个步骤任何处理 else { if (status.isDebug()) { logger.debug( "Participating transaction failed - letting transaction originator decide on rollback"); } } } //如果当前线程没有事务 else { logger.debug("Should roll back transaction but cannot - no transaction available"); } } //对回滚操作过程中的运行时异常和错误的处理 catch (RuntimeException ex) { triggerAfterCompletion(status, TransactionSynchronization.STATUS_UNKNOWN); throw ex; } catch (Error err) { triggerAfterCompletion(status, TransactionSynchronization.STATUS_UNKNOWN); throw err; } //回滚操作完成后,触发回滚之后回调操作 triggerAfterCompletion(status, TransactionSynchronization.STATUS_ROLLED_BACK); } //清除回滚之后事务状态信息 finally { cleanupAfterCompletion(status); } }