Spring声明式事务管理源码解读之事务提交 - 编程入门网
pose current TransactionStatus, preserving any existing transactionStatus for
// restoration after this transaction is complete.
oldTransactionInfo = (TransactionInfo) currentTransactionInfo.get();
currentTransactionInfo.set(this);
}
Spring声明式事务管理源码解读之事务提交(2)时间:2011-03-29 javaeye 张荣华如果当前线程中已经有了一个TransactionInfo,则拿出来放到新建的 transactionInfo对象的oldTransactionInfo属性中,然后再把新建的TransactionInfo设 置到当前线程中。 这里有一个概念要搞清楚,就是TransactionInfo对象并不是表明事务状态的对象,表 明事务状态的对象是TransactionStatus对象,这个对象同样是TransactionInfo的一个属 性(这一点,我在前面一篇文章中并没有讲清楚)。 接下来BService中的那个方法返回,那么该它退栈了,它退栈后要做的就是doFinally 方法,即把它的oldTransactionInfo设置到当前线程中(这个TransactionInfo对象显然 就是AService方法入栈时创建的,怎么现在又要设置到线程中去呢,原因就是BService的 方法出栈时并不提交事务,因为BService的传播途径是required,所以要把栈顶的方法所 创建transactioninfo给设置到当前线程中),即调用AService的方法时所创建的 TransactionInfo对象。那么在AServie的方法出栈时同样会设置TransactionInfo对象的 oldTransactionInfo到当前线程,这时候显然oldTransactionInfo是空的,但AService中 的方法会提交事务,所以它的oldTransactionInfo也应该是空了。 在这个小插曲之后,么接下来就应该是到提交事务了,之前在AService的方法出栈时 ,我们拿到了它入栈时创建的TransactionInfo对象,这个对象中包含了AService的方法 事务状态。即TransactionStatus对象,很显然,太显然了,事务提交中的任何属性都和 事务开始时的创建的对象息息相关,这个TransactionStatus对象哪里来的,我们再回头 看看createTransactionIfNessary方法吧: Java代码
再看看transactionManager.getTransaction(txAttr)方法吧: Java代码
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |