J2EE技術規範(七)——JTA(理解JTA,編寫簡單的事務客戶程式)
阿新 • • 發佈:2019-02-08
之前的內容中,寫了幾篇關於J2EE規範的部落格,現在繼續來完善這些內容,這次內容主要補充上一篇部落格。
WebLogic Server使用JTA1.0.1a實現和管理事務
WebLogic Server提供以下支援:
- 建立唯一的事務標記符(XID)
- 支援可選的事務名稱
- 跟蹤事務涉及的物件
- 通知事務的資料庫
- 使用XA改寫2PC
- 執行回滾
- 在失敗時執行自動的恢復過程
- 管理超時
處理事務的步驟:
事務的範圍:
事務能夠橫跨:
- EJB訪問
- JDBC連線
- JMS連線
事務中的EJB和JDBC的示例
事務能夠橫跨EJB方法呼叫和JDBC連線的混合方式:
... Context tc=new InitialContext(); UserTransaction ut=(UserTransaction) ic.lookup("javax.transaction.UserTransaction"); MyEJBHome ejbhome=(MyEJBHome) ic.lookup("java:com/env/ejb/MyEJBHome"); MyEJB ejb=ejbHome.create(); DataSource ds=(DataSource) ic.lookup("java:com.env/jdbc/myDB"); connection con=ds.getConnection(); Statement stmt=con.createStatement(); ut.begin(); ejb.methodA(); ejb.methodB(); stmt.executeQuery(...); stmt.executeUpdate(...);
事務中的異常
Servlets必須意識到異常和它們在事務方面的實現
事務中涉及的EJBs可能丟擲以下異常:
- Application exceptions(應用異常)——如果EJB將事務標記為回滾,那麼客戶程式只能回滾。如果沒有標記回滾,那麼客戶程式可以提交或回滾。
- 系統或非應用異常——事務被標記為回滾。客戶程式只能回滾
一、在事務中涉及的JMS操作可能丟擲JMSException
(1)在事務中涉及的JDBC操作可能丟擲SQLException
(2)在這兩種情況中,客戶程式都可以提交或回滾。
捕獲異常和回滾的示例
(1)遇到失敗事件時,事務可以執行適當的清理操作:
... Context ic=new InitialContext(); UserTransaction ut=(UserTransaction) ic.lookup("javax.transaction.UserTransaction"); ut.begin(); withdraw(fromAccount,amount); Deposit(toAccount,amount); Ut.commit(); }catch(CustomException e){ System.out.println(e); try{ ut.rollback(); }catch(SystemException se){ System.out.println(e); }catch(Exception e){ System.out.println(e); } }
JTA的內容就先講到這裡,我們接下來的部落格會繼續完善J2EE規範的其他部落格。