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