zoukankan      html  css  js  c++  java
  • Java事务管理学习二 JTA的事务管理机制

    JTA提供的是分布式的事务管理,其事务管理由JTA容器实现,JTA容器对当前加入事务的众多Connection进行调度,满足其事务性要求。 JTA的事务周期可以横跨多个JDBCConnection生命周期。因此,JTA提供了跨越Session的事务管理能力,即可以实现同一事务对应不同 的数据库管理,这一点是和上文中JDBC事务最大的不同。

        在JTA中定义了一组Java接口,用于描述JavaEE框架中事务管理器与应用程序、资源管理器以及应用服务器之间的事务通信。它主要包括高层接口,即 面向应用程序的接口;XAResource接口,即面向资源的接口;以及事务管理器的接口。值得注意的是,JTA只提供了接口,而没有具体的实现。 JTS(Java Transaction Service)是服务OTS的JTA的实现,即JTS实现了JTA接口。

        要使用JTA事务,必须使用XADataSource来产生数据库连接,产生的连接为一个XA连接。XA连接 (javax.sql.XAConnection)和非XA连接(java.sql.Connection)的区别在于:XA可以参与JTA的事务,且不 支持自动提交。要用JTA进行事务界定,则应用程序需要调用javax.transaction.UserTransaction,它使用 begin()、commit()和rollback()方法来完成事务范围的界定及事务的提交和回滚。

        下面是一个使用JBoss容器对提供的JTA事务进行控制的实例:

       javax.transaction.UserTransaction tx = null;
     java.sql.Connection conn1 = null;
     java.sql.Connection conn2 = null;
     
     try{
      //取得JTA事务,在本例中由JBoss容器来管理
      tx = (javax.transaction.UserTransaction)context.lookup("java:comp/UserTransaction");
      
      //取得数据库连接池,必须有XA的数据库、驱动程序
      DataSource ds1 = (javax.sql.DataSource) context.lookup("java:/XAOracleDS");
      DataSource ds2 = (javax.sql.DataSource) context.lookup("java:/XASQLServerDS");
      
      //开始事务
      tx.begin();
      //取得数据库连接
      conn1 = ds1.getConnection();
      conn2 = ds2.getConnection();
      Statement stm1 = conn1.createStatement();
      Statement stm2 = conn2.createStatement();
      //数据库插入操作
      stm1.executeUpdate("insert into(username,password,email) user values(1,'admin','admin','xtlog@163.com')");
      stm1.close();
      //数据库更新操作
      stm2.executeUpdate("update user set email='xiugai@123.com' where id=1" );
      stm2.close();
      
      //提交事务
      tx.commit();
     }catch(Exception e){
      try{
       tx.rollback();
      }catch(Exception e){
       e.printStackTrace();
      }
     }finally{
      //关闭连接
     }

    以上的事务处理对象tx是从JBoss容器中取得的。数据库连接操作是在事务开始之后进行,这样就实现了多数据库的事务管理。

  • 相关阅读:
    poj 1015 Jury Compromise(背包+方案输出)
    最长公共上升子序列 (poj 2127) (Greatest Common Increasing Subsequence)
    轮廓线DP:poj 2279 Mr. Young's Picture Permutations
    LCS的几种求法
    POJ 1737 Connected Graph(高精度+DP递推)
    Cats transport(codeforces311B)(斜率优化)
    高精度(压位+判负数+加减乘+读写)
    洛谷 P2257 YY的GCD
    [POI2007]ZAP-Queries (莫比乌斯反演+整除分块)
    [SDOI2010]古代猪文 (欧拉,卢卡斯,中国剩余)
  • 原文地址:https://www.cnblogs.com/waka401/p/2721198.html
Copyright © 2011-2022 走看看