WebLogic Server使用JTA1.0.1a实现和管理事务

WebLogic Server提供以下支持:

  • 创建唯一的事务标记符(XID)
  • 支持可选的事务名称
  • 跟踪事务涉及的对象
  • 通知事务的数据库
  • 使用XA改写2PC
  • 执行回滚
  • 在失败时执行自动的恢复过程
  • 管理超时

处理事务的步骤:

事务的范围:

事务能够横跨:

  • EJB访问
  • JDBC连接
  • JMS连接

事务中的EJB和JDBC的示例

事务能够横跨EJB方法调用和JDBC连接的混合方式:

 

  1. ...  
  2. Context tc=new InitialContext();  
  3. UserTransaction ut=(UserTransaction)  
  4.     ic.lookup("javax.transaction.UserTransaction");  
  5. MyEJBHome ejbhome=(MyEJBHome)  
  6.     ic.lookup("java:com/env/ejb/MyEJBHome");  
  7. MyEJB ejb=ejbHome.create();  
  8. DataSource ds=(DataSource)  
  9.     ic.lookup("java:com.env/jdbc/myDB");  
  10. connection con=ds.getConnection();  
  11. Statement stmt=con.createStatement();  
  12. ut.begin();  
  13. ejb.methodA();  
  14. ejb.methodB();  
  15. stmt.executeQuery(...);  
  16. stmt.executeUpdate(...);  

 

事务中的异常

Servlets必须意识到异常和它们在事务方面的实现

事务中涉及的EJBs可能抛出以下异常:

  • Application exceptions(应用异常)——如果EJB将事务标记为回滚,那么客户程序只能回滚。如果没有标记回滚,那么客户程序可以提交或回滚。
  • 系统或非应用异常——事务被标记为回滚。客户程序只能回滚

一、在事务中涉及的JMS操作可能抛出JMSException

(1)在事务中涉及的JDBC操作可能抛出SQLException

(2)在这两种情况中,客户程序都可以提交或回滚。
 

捕获异常和回滚的示例

(1)遇到失败事件时,事务可以执行适当的清理操作:

 

  1. ...  
  2. Context ic=new InitialContext();  
  3. UserTransaction ut=(UserTransaction)  
  4.     ic.lookup("javax.transaction.UserTransaction");  
  5. ut.begin();  
  6. withdraw(fromAccount,amount);  
  7. Deposit(toAccount,amount);  
  8. Ut.commit();  
  9. }catch(CustomException e){  
  10.     System.out.println(e);  
  11.     try{  
  12.         ut.rollback();  
  13. }catch(SystemException se){  
  14.     System.out.println(e);  
  15. }catch(Exception e){  
  16.     System.out.println(e);  
  17.     }  
  18. }