首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

EJB 交易管理核心:OTS/JTS 模型、交易屬性與分散式交易支援

     編輯:J2EE

交易基礎與 CORBA OTS 對應

EJB 交易模型基於 CORBA OTS (Object Transaction Service)。OTS 核心組件:

  • Control:代表一個交易,提供 Coordinator 與 Terminator
  • Terminator:提交/回滾交易
  • Coordinator:管理 Resource 與 Synchronization 註冊,協調兩階段提交
  • Resource:擁有交易狀態的物件(如資料庫連線),實作兩階段提交協議
  • Synchronization:交易完成時被通知,不參與投票

容器代表 Bean 使用 Control 物件管理交易,Bean 不直接存取。

可恢復物件 vs 交易物件

Entity Bean 屬於「交易物件」:無 commit/rollback 方法,容器代管交易,Bean 管理的可恢復資源(Resource)透明加入交易。Bean 可透過 EJBContext.setRollbackOnly() 投票要求回滾。

部署描述符交易屬性六大類型

屬性行為
TX_NOT_SUPPORTED掛起現有交易,無交易上下文執行
TX_SUPPORTS若有交易則加入,否則無交易執行
TX_REQUIRED必須在交易中執行;無則容器啟動新交易
TX_REQUIRES_NEW總是啟動新交易;掛起現有交易
TX_MANDATORY呼叫時必須已在交易中,否則拋出例外
TX_BEAN_MANAGEDBean 自行管理交易邊界

JTS (Java Transaction Service)

JTS 為底層交易服務的 Java 介面封裝,核心 UserTransaction 介面提供 begin()、commit()、rollback()、setRollbackOnly()、setTransactionTimeout()、getStatus() 等方法。僅供 TX_BEAN_MANAGED Bean 或客戶端劃分交易使用。

Bean 管理交易 (BMT) 細節

  • 整個 Bean 必須統一為 BMT,不可混用
  • 有狀態 Session Bean 可跨方法保持交易開啟
  • 無狀態 Session Bean 與 Entity Bean 方法不得跨呼叫保持交易開啟
  • 透過 SessionContext/EntityContext 取得 UserTransaction

SessionSynchronization:有狀態 Bean 感知交易邊界

實作 javax.ejb.SessionSynchronization:

  • afterBegin():交易開始後通知
  • beforeCompletion():提交前通知(回滾時不調用)
  • afterCompletion(boolean committed):交易完成通知結果

實作此介面暗示 Bean 跨方法維護交易狀態,故必須為有狀態 Bean。無狀態 Bean 不得實作。

加入現有交易:EJBContext 回滾投票

任何 Bean 可呼叫 setRollbackOnly() 標記交易回滾,getRollbackOnly() 檢查狀態。設計為無參數,防止 Bean 互相覆蓋投票。

客戶端劃分交易與資料庫連線管理

客戶端可透過 UserTransaction 跨多伺服器 Bean 劃分交易。資料庫連線(JDBC)不得使用自動提交,容器透明將連線註冊至當前交易(OTS Resource 模式),交易結束時自動提交/回滾。非交易感知 JDBC 驅動程式不可靠,不建議使用。

分散式交易支援

廠商須為 EJBObject 產生支援交易上下文傳播的 Stub/Skeleton。遠端 Bean 的 Skeleton 需提取上下文並關聯至本地交易。適用場景:客戶端跨伺服器交易、Bean 呼叫遠端 Bean。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved