`
ghsea
  • 浏览: 111893 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

源码之Transaction

阅读更多
1.JDBC实现的事务:
 
  1. import java.sql.*;  
  2. public class JDBCTest {  
  3.     public static void main(String[] args)throws Exception{  
  4.         Connection con=null;  
  5.         Statement  st=null;  
  6.         try{  
  7.             Class.forName("org.gjt.mm.mysql.Driver").newInstance();    
  8.         con=DriverManager.getConnection("jdbc:mysql://localhost/test","xx","....");  
  9.            boolean b=con.getAutoCommit();  
  10.            if(b){  
  11.                 con.setAutoCommit(false);  
  12.             }  
  13.             else{  
  14.                 System.out.println("The transaction is not auto commit.");  
  15.             }  
  16.             st=con.createStatement();  
  17.             String sql="insert into user values(2,'test1','武汉理工','12345678')";  
  18.             boolean r=st.execute(sql);  
  19.             con.commit();  
  20.             if(b){  
  21.                 System.out.println("The sql is not executed succssful");  
  22.             }  
  23.         }  
  24.         catch(Exception e){  
  25.             con.rollback();  
  26.             e.printStackTrace(); 
  27.         }  
  28.         finally{  
  29.             if(st!=null){  
  30.                 st.close();  
  31.             }  
  32.             if(con!=null){  
  33.                 con.setAutoCommit(true);  
  34.                 con.close();  
  35.             }  
  36.         }  
  37.      }  
  38. }  

2.Hibernate实现的事务:
        不像JDBC并未提供单独的类来表示事务,Hibernate提供了接口Transaction来表示事务。这个接口有多个实现用于不同的开发需求和环境,其默认实现为JDCBCTransaction,以这个类的源码来观察Transaction。
        Transaction接口的核心方法有三个:
 
  1. public void begin() throws HibernateException;
  2. public void commit() throws HibernateException;  
  3. public void rollback() throws HibernateException;  
     begin()代码
 
  1. if (toggleAutoCommit) {  
  2.       jdbcContext.connection().setAutoCommit(false); 
  3.       //由于JDBC的默认提交方式是自动提交,这里将其设置成非自动提交。
  4. }
  5. ............
  6. callback = jdbcContext.registerCallbackIfNecessary();
  7. ...........
  8. jdbcContext.afterTransactionBegin(this);
    commit()代码
 
  1. if ( callback ) {  
  2.         jdbcContext.beforeTransactionCompletion( this );   
  3. }  
  4. try {  
  5.         commitAndResetAutoCommit(); 
  6.        //jdbcContext.connection().commit();上面这个方法的实现
  7.         committed = true;  
  8.         if ( callback ) {  
  9.             jdbcContext.afterTransactionCompletion( truethis );  
  10.         }  
  11.             afterTransactionCompletion( Status.STATUS_COMMITTED );  
  12.         }  
       rollback()
 
  1. try {  
  2.        rollbackAndResetAutoCommit(); 
  3.        //jdbcContext.connection().rollback();上面这个方法的实现
  4.        rolledBack = true;  
  5.        afterTransactionCompletion(Status.STATUS_ROLLEDBACK);  
  6.      }  
  7. catch (SQLException e) {  
  8.        ......        
  9. }  
  10. finally {  
  11.     if ( callback ) {  
  12.           jdbcContext.afterTransactionCompletion( falsethis );  
  13.     }  
  14.      closeIfRequired(); 
  15. }  

           可见HIberante的事务T\ransaction所做的主要事情实现上还是那么些,但它在异常控制上做了更加细致的工作。有一点不明白的是callback是用来干什么的?
分享到:
评论

相关推荐

    Hibernate+Transaction+myeclipse6+事例+工程源码.rar

    本篇将围绕"Hibernate+Transaction+myeclipse6"这一主题,结合具体的工程源码实例,探讨它们在实际项目中的应用。 首先,我们来理解Hibernate的核心概念。Hibernate是一个基于Java的ORM框架,它允许开发者以面向...

    com.qz.transaction.MainActivity 非常好的源码资源

    `com.qz.transaction`这个包名暗示了该应用可能专注于交易或财务相关的功能,`MainActivity`作为应用的起点,其源码将展示如何初始化应用、创建用户界面、处理交易数据以及与其他组件交互等关键步骤。 【标签】...

    分布式事务书籍随书源码-distribute-transaction.zip

    "distribute-transaction.zip"这个压缩包包含了"分布式事务书籍随书源码-distribute-transaction",很可能是为了辅助读者理解和学习分布式事务设计与实现而提供的。 首先,分布式事务的基本概念是:在分布式系统中...

    HibernateSession , Transaction 研究

    通过源码分析,我们可以更深入地理解`Session`和`Transaction`的实现细节。`Session`的内部维护了一个JDBC的`Connection`对象,而`Transaction`则管理着`Connection`上的事务状态。`SessionFactory`是`Session`的...

    Spring源码解析.zip

    本压缩包“Spring源码解析”提供了对Spring框架核心组件——IOC(Inversion of Control,控制反转)、AOP(Aspect Oriented Programming,面向切面编程)以及Transaction(事务管理)的源码分析,帮助开发者更全面地...

    bitcoin源码分析文档

    Bitcoin 源码分析文档 本文档对 Bitcoin 源码进行了深入分析,涵盖了 Bitcoin 源码中各个模块的关联关系图、各个模块类关系图等。下面是对 Bitcoin 源码分析文档中所涉及的知识点的详细说明: 术语介绍 在 ...

    jotm2.0最新源码包

    JOTM,全称为Java Open Transaction Manager,是一个开源的、完全符合JTA(Java Transaction API)规范的事务管理器。JTA是Java平台上的标准接口,用于管理分布式事务处理,确保在多线程和分布式环境中的数据一致性...

    Transaction

    源码分析方面,从标签"源码"来看,可能涉及到对事务管理机制的具体实现探究。例如,`DmfHibernateProxy1.java`可能是使用Hibernate ORM框架的一个代理类,用于在数据访问对象(DAO)层中处理事务。Hibernate提供了一...

    There is no active transaction解决

    之前一直找原因,最后知道了解决方法,具体请下载源码查看。特别是用到throw的事务中

    spring源码中英文注释

    1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,允许组件之间解耦。DI通过容器管理组件的依赖关系,而不是由组件自身负责查找和管理。在源码中,你可以看到`ApplicationContext`如何创建bean...

    java 网上支付源码

    例如,使用JTA(Java Transaction API)进行分布式事务管理。 5. **异常处理与错误报告**:良好的异常处理和错误报告机制可以及时发现并解决支付过程中的问题。Java源码应包含对网络异常、支付失败、服务器错误等的...

    源码\Android程序源码--数据库

    源码中可能有`beginTransaction()`, `setTransactionSuccessful()`, `endTransaction()`等方法来控制事务。 通过深入学习和分析这个Android程序源码,开发者不仅可以掌握SQLite的基本操作,还能了解到Android数据...

    python django事务transaction源码分析详解

    本文将深入解析`transaction.atomic`的源码,帮助理解其工作原理。 首先,`transaction.atomic`有两种主要的使用方式:作为装饰器和作为上下文管理器。这两种方式都是为了确保在指定的代码块中执行的所有数据库操作...

    seata-2.x 源码包

    在源码中,TM 的接口定义在 `io.seata.core.protocol.transaction` 包下,理解 TM 如何与 TC 交互对掌握 Seata 工作原理至关重要。 5. **资源代理(RM, Resource Manager)**: RM 代表数据库或者其他存储资源,它...

    hibernate 源码直接导入Eclipse

    接下来,我们将深入探讨Hibernate的核心概念、如何在Eclipse中导入源码以及如何利用这些源码进行学习。 1. Hibernate 核心概念: - ORM(Object-Relational Mapping):ORM是将数据库中的关系数据映射为Java对象的...

    tomcat源码导入myeclipse

    5. jta-1.1.jar: Java Transaction API,提供了分布式事务处理的能力,对于在多资源间协调事务操作的Web应用来说非常重要。 导入Tomcat源码到MyEclipse的步骤通常包括以下几个阶段: 1. **准备环境**:确保已安装...

    Java聚合支付源码

    5. **异常处理与事务管理**:在处理支付过程中,可能会遇到网络问题、服务器错误等情况,因此源码中会包含完善的异常处理机制,以及使用Spring的Transaction API进行事务管理,保证数据一致性。 6. **测试与调试**...

    安卓Android源码——精典源码之模仿微信导航页效果源码.zip

    这个源码项目“安卓Android源码——精典源码之模仿微信导航页效果源码.zip”旨在帮助开发者理解并实现类似微信应用中的滑动式底部导航菜单。在本文中,我们将深入探讨这一设计的实现原理、关键组件以及相关的Android...

    Android应用源码之LiaTestFragment.zip

    "Android应用源码之LiaTestFragment.zip" 提供了一个Android应用中的Fragment源码学习案例。Fragment是Android应用程序设计中的一个重要组件,它允许我们把界面逻辑拆分成多个可重用的部分。在本文中,我们将详细...

Global site tag (gtag.js) - Google Analytics