1. 程式人生 > >J2EE技術規範(七)——JTA(理解JTA,編寫簡單的事務客戶程式)

J2EE技術規範(七)——JTA(理解JTA,編寫簡單的事務客戶程式)

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