之前的內容中,寫了幾篇關於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規範的其他部落格。