java jta

作者:原创时间:2022-04-02
文档

java jta是什么,让我们一起了解一下?

JTA是Java事务API,是一个Java企业版的应用程序接口,在Java程序中,允许完成跨越多个XA资源的分布式事务。隔离事务与底层的资源,实现透明的事务管理方式,提供了跨数据库连接(或其他JTA资源)的事务管理能力。

JTA的架构是什么?

TA的架构包括事务管理器(Transaction Manager)和一个或多个支持 XA 协议的资源管理器 ( Resource Manager ) 两部分, 我们可以将资源管理器看做任意类型的持久化数据存储;事务管理器则承担着所有事务参与单元的协调与控制。

根据所面向对象的不同,我们可以将 JTA 的事务管理器和资源管理器理解为两个方面:面向开发人员的使用接口(事务管理器)和面向服务提供商的实现接口(资源管理器)。

其中开发接口的主要部分即为 UserTransaction 对象,开发人员通过此接口在信息系统中实现分布式事务;而实现接口则用来规范提供商(如数据库连接提供商)所提供的事务服务,它约定了事务的资源管理功能,使得 JTA 可以在异构事务资源之间执行协同沟通。

JTA是如何在Java中实现的?

示例代码如下:

 public void transferAccount() { 
 UserTransaction userTx = null; 
 Connection connA = null; 
 Statement stmtA = null; 
 Connection connB = null; 
 Statement stmtB = null; 
    
 try{ 
       // 获得 Transaction 管理对象
 userTx = (UserTransaction)getContext().lookup("\
       java:comp/UserTransaction"); 
 // 从数据库 A 中取得数据库连接
 connA = getDataSourceA().getConnection(); 
 // 从数据库 B 中取得数据库连接
 connB = getDataSourceB().getConnection(); 
      
                        // 启动事务
 userTx.begin();
 // 将 A 账户中的金额减少 500 
 stmtA = connA.createStatement(); 
 stmtA.execute("
            update t_account set amount = amount - 500 where account_id = 'A'");
 // 将 B 账户中的金额增加 500 
 stmtB = connB.createStatement(); 
 stmtB.execute("\
             update t_account set amount = amount + 500 where account_id = 'B'");
 // 提交事务
 userTx.commit();
 // 事务提交:转账的两步操作同时成功(数据库 A 和数据库 B 中的数据被同时更新)
 } catch(SQLException sqle){ 
 try{ 
         // 发生异常,回滚在本事务中的操纵
                  userTx.rollback();
 // 事务回滚:转账的两步操作完全撤销 
 //( 数据库 A 和数据库 B 中的数据更新被同时撤销)
 stmt.close(); 
                 conn.close(); 
 ... 
 }catch(Exception ignore){ 
 } 
 sqle.printStackTrace(); 
 } catch(Exception ne){ 
 e.printStackTrace(); 
 } 
 }

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
java jtable java jtextfield java jvm java jxl java kafka java keystore java kmeans java kudu java lamada java leveldb java linklist java linq java list.add java list.contains java locale java localtime java logging java logstash java main java malloc java jstat java jstack java jsonp java jsonfield java jquery java jps java joptionpane java jndi java jmh java jmeter java jit java jetty java jep 计算机管理怎么打开 excel怎么排序 两个excel如何独立显示 微信分组怎么删除 朋友圈怎么转发 qq怎么清理缓存和垃圾清理 苹果手机怎么恢复出厂设置