IBM CICS 支援多種程式語言並允許混合編程。若應用純 Java,利用面向對象的 Java 環境在 CICS Java 程序間傳遞資料對象,優於傳統面向欄位的位元組結構。本文系統介紹 CICS TS V4.2+ 提供的各類 Java 環境,幫助 Java 開發者選型與整合。
演進脈絡
- 1999 年:引入 JVM 池,單任務佔用單一 JVM。
- 2009 年 (TS V4.1):引入
JVMServer 資源,單 JVM 可併發分派多任務,初僅供系統功能(Dynamic Scripting、SupportPac CN11)。
- 2011 年 (TS V4.2):JVMServer 開放給客戶應用,支援 OSGi 與 Axis2 環境;64 位 JVM 取代 31 位,大幅提升併發能力。
- 2010 年:Dynamic Scripting Feature Pack (Project Zero 實現),支援 PHP/Groovy 快速開發情境應用,含 Java 橋接與 Zero Resource Model (ZRM)。
非 CICS 環境的 Java 客戶端可透過 CICS Transaction Gateway (JCA/CCI) 或 WebSphere Optimized Local Adapter (WOLA,跨記憶體通訊) 調用 CICS 程序。
資料傳遞機制回顧
- COMMAREA:≤32KB 通訊區,面向欄位位元組結構,COBOL 等程式語言友好,Java 需序列化/反序列化或工具生成存取代碼。
- 通道與容器 (TS V3.1+):多個具名容器組成通道,容器任意大小、數量不限(受區域儲存限制)。支援 CHAR(字元,可碼頁轉換)與 BIT(二進制,類位元組陣列)類型。Java 客戶端 (CICS TG V7.1+,IPIC) 亦可使用。
跨 CICS Java 環境傳遞 Java 對象,序列化放入容器再反序列化是可行但繁瑣的路徑。本系列第 2 部分將提供 DDW_CicsObjectTransporter 框架簡化此過程。
CICS 提供的五大 Java 環境詳解
1. 傳統池化 JVM
- 指定最大 JVM 數,CICS 池化管理。
- 單任務佔用單 JVM,隔離性好但併發受限於池大小。
- 定義
PROGRAM 資源:指定初始 Java 類、儲存鑰鑰 (CICS/USER)、JVMProfile (CLASSPATH、LIBPATH、堆大小、DB2 驅動等)。
- 入口方法:
public static void main(CommAreaHolder ca) 或 main(String[] args)。
- 使用 JCICS 類與 CICS 互動,建議使用 CICS 設施 (如 DB2 連接) 讓 CICS 控制工作單元。
- 31 位 JVM 限制單區域 JVM 數,常需多 Java Owning Regions (JOR) 分擔。V4.2 64 位 JVM 緩解此問題。
- IBM 宣告未來版本將移除池化 JVM。
2. CICS JVM Server 環境 (JVMServer 資源)
- 單 JVM 可併發 1-256 任務 (預設 15),單區域多 JVMServer 總任務 ≤1024。
- V4.2 切換 Java 6 64 位,新增 OSGi 與 Axis2 兩大客戶可用環境。
- 定義
PROGRAM:CONCURRENCY(REQUIRED)、儲存鑰鑰、JVMServer 名稱、OSGi 登錄項名稱。
- OSGi Bundle 清單需含
CICS-MainClass= 指定入口類。
- 記憶體源自 CICS 區域地址空間 (64 位高位儲存),單區域可容納多 JVMServer。
3. 基於 OSGi 的 JVM Server 環境
核心優勢:動態模組系統,將系統劃分為獨立 Bundle(獨立生命週期、動態安裝/解除/升級),服務登錄表支援介面級發現與綁定、依賴宣告、生命週期方法、擴展點。
- 無 OSGi 時 CLASSPATH 靜態;OSGi 允許 JVM 運行期動態增減類。
- 一或多 Java 套件打包為 Bundle,多 Bundle 編組為
CICS BUNDLE,安裝/啟用/禁用/棄用觸發對應 OSGi 生命週期。
- CICS Explorer 可視化 Bundle 與 BUNDLE 狀態。
- 定位:CICS Java 業務邏輯的戰略方向。
4. 基於 Axis2 的 JVM Server 環境
- CICS TS V3.1 起支援將程序發布為 Web Service (早期靠 SupportPac/SOAP Feature)。
- V4.2 內建 Apache Axis2 (開源 Web Service 引擎),處理 SOAP 訊息,提升 zAAP 專用處理器利用率(Java/XML 解析可卸載至 zAAP)。
- 支援:熱部署、異步 Web Service、MEP (WSDL 2.0)、WSDL 1.1/2.0、JAX-WS 註解發布 POJO、Axis2 風格 Header Handler。
- 構建工件屬 Java 6 JSE 標準。
5. CICS Dynamic Scripting
- Feature Pack for Dynamic Scripting (Project Zero 實現),運行於 JVMServer。
- 目標:敏捷編程環境,快速實現情境應用(臨時行銷、團隊效率工具)。
- 支援 PHP、Groovy、Java 混合編寫;Java 橋接允許腳本實例化 Java 類、調用方法、使用 JCICS 控制 CICS 資源。
- Zero Resource Model (ZRM):REST 介面或簡單 API 快速定義/存取表格資料,支援 SQL (DB2/Derby)。
- HTTP 請求訪問(HTML/JS/CSS、PHP/Groovy 腳本、REST 服務)。
- 最佳實踐:業務邏輯置於 OSGi JVMServer(任意 CICS 互操作選項可訪問),Dynamic Scripting 快速提供表現層。
- V1.0 運行於 TS V4.1,V1.1 運行於 TS V4.2。
6. CICS Transaction Gateway (CICS TG)
- 支援 C/C++、Java、.NET、VB、PowerBuilder、工作站 COBOL 等客戶端語言。
- Java 客戶端實現 JCA,標準 CCI API 實現託管/非託管連接。託管連接由 JEE 應用伺服器管理連接、事務、安全上下文。
- 多種配置模式,詳見 CICS TG 資訊中心。
- 本文介紹的 Java 對象傳遞技術適用於 CICS TG 客戶端 → CICS Java 業務邏輯場景。
在 CICS Java 程序間傳遞 Java 對象的現代化方案
利用通道與容器傳遞序列化 Java 對象,避免:
- 建立 COBOL copybook 佈局
- 運行工具生成 Java 資料對象
- Java 程式員學習 COBOL
- 維護 copybook 源碼庫與生產周轉
- 資料變更引發 copybook 更新連鎖反應
序列化/反序列化是 Java 程式員熟悉技術。源程序序列化對象放入容器,目標程序反序列化、修改、序列化返回。同一環境內直接用 Java 方法調用;跨環境/區域才需此機制。
期望的簡潔交互模型:
// 呼叫端
String abc = "Some information to Pass";
Employee emp = new Employee("John Doe");
DDW_CicsObjectTransporter transporter = new DDW_CicsObjectTransporter();
transporter.addObject("abc", abc).addObject("emp", emp).execute("TARGET");
String errorString = (String)transporter.getObject("error");
if (errorString != null) { processError(); }
else { Manager newManager = (Manager)transporter.getObject("mgr"); /* ... */ }
// 響應端
DDW_CicsObjectTransporter transporter = new DDW_CicsObjectTransporter();
Employee emp = (Employee)transporter.getObject("emp");
transporter.removeObject("abc");
Manager mgr = new Manager("Joe Bloggs");
transporter.addObject("mgr", mgr);
return;
第 2 部分將提供 DDW_CicsObjectTransporter 實現與 DDW_CicsTg_ObjectTransporter (CICS TG 客戶端專用)。
結語
CICS Java 環境全景:
- 傳統池化 JVM(單任務/單 JVM,將淘汰)
- JVM Server 環境(多任務/單 JVM),含三大子環境:
• OSGi(動態模組、服務登錄、依賴管理,戰略方向)
• Axis2(高效能 SOAP/Web Service、zAAP 友好、JAX-WS POJO 發布)
• Dynamic Scripting(PHP/Groovy 快速 Web 開發、Java 橋接、ZRM)
- CICS Transaction Gateway(非 CICS Java 客戶端連接 CICS)
資料傳遞:COMMAREA (≤32KB) 與通道/容器 (多任意大小容器)。跨 Java 環境傳遞 Java 對象,建議序列化置入容器,第 2 部分將給出通用框架實現。