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();? ?}? ?}
以上就是小編今天的分享了,希望可以幫助到大家。