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

基於 JCA 與 CICS Transaction Gateway 的事務集成深度解析

     編輯:Java 相關知識

企業級應用現代化進程中,將 CICS 核心業務與 J2EE 平台實現事務級集成是高頻剛需。本文基於 J2EE Connector Architecture (JCA) 與 CICS Transaction Gateway (CICS TG),系統闡述事務模型差異、資源適配器分類、兩階段提交 (2PC) 原理、Last Participant Support (LPS) 機制、WebSphere 容器事務控制及部署場景決策,為架構師與開發者提供落地指南。

一、 事務模型認知統一:J2EE vs CICS

核心洞見:CICS UOW 類比 J2EE 事務;CICS Task 可跨多個 UOW。集成關鍵在於讓 J2EE TM 能協調 CICS 資源管理器參與全局事務。

二、 JCA 系統契約與資源適配器分類

JCA 定義資源適配器需實現的系統契約:連接管理、事務管理、安全管理。根據事務能力,資源適配器在 ra.xml 中聲明三類:

  • XATransaction:實現 XAResource,支持全局 2PC,能影響全局事務結果。CICS ECI XA Resource Adapter (TG v6.1 z/OS 專供)。
  • LocalTransaction:僅支持資源管理器本地事務 (RMLT),無 2PC 能力。CICS ECI Resource Adapter (JCA 1.0/1.5,跨平台)。
  • NoTransaction:無事務屬性,不參與協調。CICS EPI Resource Adapter (面向 3270 終端橋接,不適合事務集成)。

三、 兩階段提交 (2PC) 與 Last Participant Support (LPS)

標準 2PC 流程

  1. Phase 1 (Prepare):TM 要求所有 XA 資源管理器 Prepare。RM 持久化重做/回滾日誌,投票 Prepared 或 RolledBack。投票 Prepared 後進入 In-doubt (未決) 狀態,等待 TM 最終決議。
  2. Phase 2 (Commit/Rollback):全投 Prepared → TM 發送 Commit;否則 Rollback。RM 完成持久化更新、釋放鎖,回應 Committed。TM 收齊所有 Committed 事務結束。TM 失敗重啟後通過 Recovery Log 與 RM 重新同步完成提交/回滾。

兩階段提交流程圖

LPS:單階段資源參與全局事務的妥協方案

場景:全局事務包含多個 XA RM + 一個 LocalTransaction RM (如 CICS ECI RA)。

機制:

  1. TM 先 Prepare 所有 XA RM。
  2. Prepare 成功 → TM 調用 Local RM 的 LocalTransaction.commit()。
  3. Local RM Commit 成功 → TM 發送 Commit 給所有 XA RM;失敗 → TM 發送 Rollback 給所有 XA RM。

LPS 流程圖

風險 (Heuristic Hazard):Local RM Commit 過程中通訊失敗,TM 無法確定其結果 → 混合結果風險。必須 在部署描述符 (XDD) 啟用 Accept heuristic hazard,並建議開啟 TM 的 Enable logging for heuristic reporting。

四、 CICS TG 事務支持矩陣

維度J2EE 事務CICS 事務
定義不可分割的工作單元 (Atomic Unit of Work),多資源管理器協調更新由 Transaction ID (TRANID) 觸發,運行在 CICS Task 下,含多個 Unit of Work (UOW),同步點分隔
協調者Transaction Manager (TM)CICS 自身充當 TM
資源管理器JDBC DataSource, JMS, CICS (via JCA) 等VSAM, DB2, IMS, Temporary Storage, Transient Data 等
同步點TM 驅動 2PCEXEC CICS SYNCPOINT (顯式/隱式)

z/OS 獨有優勢:本地模式 (ConnectionURL=local) 直接調用 EXCI,利用 MVS RRS 實現高性能 2PC,無網絡開銷;支持跨克隆 TG Daemon TCP/IP 負載均衡。

五、 WebSphere 容器事務控制策略

Web 容器

  • 支持全局事務 (BMT) via UserTransaction,不支持 CMT。
  • 支持 RMLT via Connection.getLocalTransaction()。
  • 事務壽命限制在單個 HTTP Request 內,service() 結束未完成的全局事務將被回滾。

EJB 容器:CMT 為首選

通過 ejb-jar.xml <trans-attribute> 聲明:

資源適配器事務類型平台關鍵協議/特性適用 WebSphere 版本
CICS ECI RALocalTransaction (RMLT)z/OS, 分布式ECI (SYNC_SEND_RECEIVE), SYNCONRETURNWAS V5/V5.1/V6 (JCA 1.0/1.5)
CICS ECI XA RAXATransaction (Global 2PC)僅 z/OSTransactional EXCI + RRS, XAResource 實現WAS V6 (JCA 1.5) + CICS TG v6.1 z/OS + CICS TS z/OS
CICS EPI RANoTransaction分布式3270 Bridge不適用事務集成

LTC (Local Transaction Container):非全局事務上下文下的劃界機制。由 XDD 三屬性控制:Boundary (BeanMethod/ActivitySession)、Resolver (ContainerAtBoundary/Application)、UnresolvedAction (Commit/Rollback)。Web 組件僅能配置 UnresolvedAction。

六、 關鍵部署場景決策樹

  1. Servlet 同一事務多 ECI 請求? → 默認每請求自動 Commit (SYNCONRETURN)。需同一事務:改用 EJB CMT 或 Servlet BMT (UserTransaction + XA RA)。
  2. 鏈接發 SYNCPOINT 的 CICS 程序? → 必須用 SYNCONRETURN (非擴展),否則協調者衝突。Web 容器默認如此;EJB 用 Never/NotSupported 實現。
  3. EJB 同一事務多 ECI 請求? → 用 Required/RequiresNew (XA RA) 實現 Long-running Mirror Task。
  4. 全局事務中調用 CICS 部分? 四種路徑:
    1. CICS ECI XA RA (TG v6.1 z/OS) —— 標準 2PC,跨多 CICS 區及 XA RM。
    2. WAS z/OS RRS 全局事務 (ECI RA + RRS) —— z/OS 本地優化,無 XA 流開銷。
    3. 單一 CICS 區優化 (Single 1PC Optimization) —— 全局事務僅一個 RM 分支,TM 降級為 1PC Commit。
    4. LPS (Last Participant Support) —— 多 XA RM + 一個 CICS ECI RA (LocalTransaction),需接受 Heuristic 風險。
  5. z/OS WAS 事務差異? → ECI RA 通過 RRS 直接支持全局事務,無需 XA RA;不支持 Bean 管理的 LocalTransaction (Connection.getLocalTransaction())。
  6. 網絡故障處理? → Prepare 前斷開 → RRS 標記 Rollback;Commit 階段斷開 → In-doubt 掛起,連接恢復等待 TM 決議。
  7. 單階段優於兩階段? → 單次 CICS 調用、無其他 RM 更新 → 用 SYNCONRETURN 非事務請求最簡單高效;單一 CICS 系統承載所有更新 → LocalTransaction (RMLT) 性能優於 XA,但缺乏恢復邏輯。
  8. 全局事務混用 Local + XA RA? → EJB 容器拋異常阻止 (非法嘗試),除非啟用 LPS。
  9. ECIRequest/CCF 類支持? → WAS V5 僅 Web 容器支持,非 JCA 托管,無法參與 RMLT/全局事務,需自行補償邏輯。
  10. CICS 異常終止 (ABEND)? → XA 協議假定中止,處理態故障自動回滾。ABEND 觸發自動回滾兩途徑:
    1. CICS TS V2+ 設置 DFHXCOPT ABENDBKOUT=YES (APAR PK17426/7)。
    2. J2EE 捕獲 CICSTxnAbendException → sessionCtx.setRollbackOnly() 強制回滾。

七、 總結

JCA 事務管理契約是連接 J2EE 與 CICS 的基石。選型決策取決於:

  • 平台 (z/OS vs 分布式) → 決定是否可用 XA RA / RRS。
  • 容器 (Web vs EJB) → 決定 CMT/BMT/LTC 可用性。
  • 事務邊界範圍 (單 CICS 區 vs 多 RM) → 決定 2PC / 1PC優化 / LPS。
  • 風險承受度 (Heuristic Hazard) → 決定是否啟用 LPS。

建議:新建 z/OS 集成優先採用 CICS ECI XA RA + RRS;分布式平台或存量系統視場景選 RMLT + SYNCONRETURN 或 LPS;嚴禁在全局事務中直接混用 LocalTransaction RA 與 XA RA (未啟用 LPS 時)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
屬性ECI 調用類型CICS Mirror Task 事務範圍
Required / RequiresNew / MandatoryXA TransactionLong-running (Extended LUW)
Supports視上下文:有全局事務用 XA,無則受 LTC 控制Synconreturn 或 Long-running
NotSupported / NeverNon-extended (SYNCONRETURN)Synconreturn (獨立 UOW)