當前位置:科普知識站>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();  }  }