快速业务通道

Spring源代码解析(六):Spring声明式事务处理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
  }    transactionManager.commit(status);    ........

Spring源代码解析(六):Spring声明式事务处理(7)

时间:2011-03-29 javaeye jiwenke

我们看到这里选取了默认的事务配置DefaultTransactionDefinition,同时在创建事 物的过程中得到TransactionStatus,然后通过直接调用事务管理器的相关方法就能完成事 务处理。

声明式事务处理也同样实现了类似的过程,只是因为采用了声明的方法,需要增加对 属性的读取处理,并且需要把整个过程整合到Spring AOP框架中和IoC容器中去的过程。

下面我们选取一个具体的transactionManager - DataSourceTransactionManager来看 看其中事务处理的实现:

同样的通过使用AbstractPlatformTransactionManager使用模板方法,这些都体现了 对具体平台相关的事务管理器操作的封装,比如commit:

Java代码

public final void commit(TransactionStatus status) throws TransactionException {      ......      DefaultTransactionStatus defStatus = (DefaultTransactionStatus) status;      if (defStatus.isLocalRollbackOnly()) {        ......        processRollback(defStatus);        return;      }        .......        processRollback(defStatus);      ......      }      processCommit(defStatus);    }

通过对TransactionStatus的具体状态的判断,来决定具体的事务处理:

Java代码

private void processCommit(DefaultTransactionStatus status) throws TransactionException {      try {        boolean beforeCompletionInvoked = false;        try {          triggerBeforeCommit(status);          triggerBeforeCompletion(status);          beforeCompletionInvoked = true;          boolean globalRollbackOnly = false;          if (status.isNewTransaction() || isFailEarlyOnGlobalRollbackOnly()) {            globalRollbackOnly = status.isGlobalRollbackOnly();          }          if (status.hasSavepoint()) {          ........           status.releaseHeldSavepoint();          }          else if (status.isNewTransaction()) {          ......            doCommit(status);          }        .........    }

Spring源代码解析(六):Spring声明式事务处理(8)

时间:2011-03-29 javaeye jiwenke

这些模板方法的实现由具体的transactionManager来实现,比如在 DataSourceTransactionManager:

Java代码

protected void doCommit(DefaultTransactionStatus status) {      //这里得到存在TransactionInfo中已经创建好的事务      DataSourceTransactionObject txObject = (DataSourceTransactionObject) status.getTransaction();      //这里得到和事务绑定的数据库连接      Connection con = txObject.getConnectionHolder().getConnection();      ........      try {      //这里通过数据库连接来提交事务        con.commit();      }     .......    }    protected void doRollback(DefaultTransactionStatus status) {      DataSourceTransactionObject txObject = (DataSourceTransactionObject) status.getTransaction();      Connection con = txObject.getConnectionHolder().getConnection();     

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号