jta java
- IT科技
- 關注:2.07W次
<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 的事務管理器和資源管理器理解為兩個方面:面向開發人員的使用介面(事務管理器)和麵向服務提供商的實現介面(資源管理器)。
其中開發介面的主要部分即為 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(); } }
- 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/dianzi/1og9m6.html