当前位置:科普知识站>IT科技>

java|jta

IT科技 阅读(2.2W)

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

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

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

JTA的架构是什么?

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

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

java 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();  }  }