聲明 TX_BEAN_MANAGED 適用於整個 Bean,不可混用。Bean 透過 setSessionContext 或 setEntityContext 參數取得 EJBContext,再呼叫 getUserTransaction() 獲得 UserTransaction 介面自行控制交易。
begin() 交易並不結束即返回僅有狀態 Session Bean 可實作。容器自動檢測並回呼:
afterBegin():交易開始,Bean 可記錄狀態、準備資料庫操作beforeCompletion():提交前,寫入快取資料、驗證邏輯afterCompletion(boolean):交易完成(提交/回滾),修正內部狀態若 Bean 已在另一交易中,新呼叫阻塞直到前一交易完成並調用 afterCompletion。回滾時不調用 beforeCompletion。實作此介面的 Bean 不得宣告為無狀態,廠商工具應檢查。
可參與容器管理交易 (TX_REQUIRED 等) 或 BMT,但不可實作 SessionSynchronization。容器確保方法進入時無現有交易上下文(必要時掛起)。
setRollbackOnly() / getRollbackOnly() 供所有 Bean 使用(不限 BMT)。標記交易回滾,不直接觸發。防止 Bean 互相干擾投票。Bean 可檢查狀態決定是否執行昂貴操作(如資料庫更新)。
Current current = new Current(); current.setServiceProvider(txMgrURL); current.create(); current.begin(); // ... 呼叫多個遠端 Bean 方法 ... current.commit();
Stub/Skeleton 隱式傳播交易上下文。
廠商須支援:客戶端跨伺服器交易、Bean 呼叫遠端 Bean。EJBObject Stub/Skeleton 隱式取得/傳播交易上下文,遠端 Skeleton 關聯至本地交易。