zoukankan      html  css  js  c++  java
  • JDBC事务和JTA事务的区别

    一、事务概述
    事务表示一个由一系列的数据库操作组成的不可分割的逻辑单位,其中的操作要么全做要么全都不做。
    与事务相关的操作主要有:
    BEGIN TRANSACTION; 开始一个事务,方法是:begin()
    COMMIT;       提交一个事务,方法是:commit()
    ROLLBACK;      回滚一个事务,方法是:rollback()
    PREPARE;       准备提交一个事务,方法是:prepare()
    二、事务的特性(ACID)
    1、原子性:同一个事务的操作要么全部成功执行,要么全部撤消
    2、隔离性:事务的所有操作不会被其它事务干扰
    3、一致性:在操作过程中不会破坏数据的完整性
    4、时效性 :事务的结果必须持久保存于介质上
    三、事务处理方式
    在JDBC连接中,使用命令声明事务的开始、提交和取消。如前一章介绍的数据库处理方式,它通过java.sql.Connection接口实现,可以启用AutoCommit。这种方式使用简单,但性能较低。
    利用JavaEE规范的JTA驱动程序。这种方式性能更好,是EJB和JMS的常用方式。
    Java EE 的分布式事务服务包括5个层次:事务管理器、应用服务器、资源管理器、应用程序、通信资源管理器。
    事务管理器:完成事务管理
    应用服务器:为应用提供服务
    资源管理器:连接相应的资源
    应 用程 序:需要使用事务的应用
    通信资源管理器:接收事务、传播事务
    四、JDBC和JTA事务区别
    简单的说 jta是多库的事务 jdbc是单库的事务
    1、jdbc事务
    JDBC事务由Connnection对象控制管理,也就是说,事务管理实际上是在JDBC Connection中实现。事务周期限于Connection的生命周期。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交。
    自动提交:缺省是自动提交。一条对数据库的更新(增/删/改)代表一项事务操作,操作成功后,系统将自动调用commit()来提交,否则将调用rollback()来回滚。
    手工提交:通过调用setAutoCommit(false)来禁止自动提交。这样就可把多个数据库操作的表达式作为一个事务,在操作完成后调 用commit()来进行整体提交,其中任何一个操作失败,都不会执行到commit(),并产生异常;此时可在异常捕获时调用rollback()进行回滚,以保持多次更新操作后,相关数据的一致性,示例如下:

    try {
        conn =DriverManager.getConnection(...);
        conn.setAutoCommit(false);//禁止自动提交,设置回滚点
        stmt = conn.createStatement();
        stmt.executeUpdate(...); //数据库更新操作1
        stmt.executeUpdate(...); //数据库更新操作2
        conn.commit(); //事务提交
    }catch(Exception ex) {
        log.error(...);
        try {
            conn.rollback(); //操作不成功则回滚
        }catch(Exception e) {
            log.error(...);
        }
    }

    JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。
    2、jta事务
    JTA(Java Transaction API)提供了跨数据库连接(或其他JTA资源)的事务管理能力。JTA事务管理则由JTA容器实现,J2ee框架中事务管理器与应用程序,资源管理器,以及应用服务器之间的事务通讯。 
    1)JTA的构成
    a、高层应用事务界定接口,供事务客户界定事务边界的
    b、X/Open XA协议(资源之间的一种标准化的接口)的标准Java映射,它可以使事务性的资源管理器参与由外部事务管理器控制的事务中
    c、高层事务管理器接口,允许应用程序服务器为其管理的应用程序界定事务的边界 
    2)JTA的主要接口 
    位于javax.transaction包中
    a、UserTransaction接口:让应用程序得以控制事务的开始、挂起、提交、回滚等。由Java客户端程序或EJB调用。
    b、TransactionManager 接口:用于应用服务器管理事务状态
    c、Transaction接口:用于执行相关事务操作
    d、XAResource接口:用于在分布式事务环境下,协调事务管理器和资源管理器的工作
    e、Xid接口:为事务标识符的Java映射
    注:前3个接口位于Java EE版的类库 javaee.jar 中,Java SE中没有提供!UserTransaction是编程常用的接口
    注意的是JTA只提供了接口,没有具体的实现。
    JTS(Java Transaction Service)是服务OTS的JTA的实现。简单的说JTS实现了JTA接口,并且符合OTS的规范。
    JTA的事务周期可横跨多个JDBC Connection生命周期,对众多Connection进行调度,实现其事务性要求。
    JTA可以处理任何提供符合XA接口的资源。包括:JDBC连接,数据库,JMS,商业对象等等。
    3)JTA编程的基本步骤
    a、首先配置JTA ,建立相应的数据源
    b、建立事务:通过创建UserTransaction类的实例来开始一个事务。代码如下:

    Context ctx = new InitialContext(p) ;
    UserTransaction trans = (UserTransaction) ctx.lookup("javax. Transaction.UserTransaction")

    c、开始事务:代码为 

    trans.begin() ;

    d、找出数据源:从Weblogic Server上找到数据源,代码如下:

    DataSource ds = (DataSource) ctx.lookup(“mysqldb") ;

    e、建立数据库连接:

    Connection mycon = ds.getConnection() ;

    f、执行SQL操作:

    stmt.executeUpdate(sqlS);

    g、完成事务:

    trans.commit(); / trans.rollback();

    h、关闭连接:

    mycon.close() ;

    啦啦啦

  • 相关阅读:
    HTML&CSS基础-内联样式和内部样式表
    HTML&CSS基础-超链接
    zabbix监控企业esxi虚拟机
    zabbix服务器监控suse系统教程
    HTML&CSS基础-内联框架
    zabbix监控路由器所有接口信息
    HTML&CSS基础-xHtml语法规范
    快速搭建企业subversion
    网易免费邮件开启smtp教程
    zabbix添加邮件报警机制
  • 原文地址:https://www.cnblogs.com/ClassNotFoundException/p/6595845.html
Copyright © 2011-2022 走看看