程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> CICS Java環境簡介

CICS Java環境簡介

編輯:關於JAVA

簡介

IBM CICS 的優勢之一是它支持多種編程語言,並允許您將它們混合到一個應用程序中。但是,如果基於 CICS 的應用程序僅使用 Java,而您想要利用各種 CICS Java 環境的優勢。當在 CICS 程序之間傳遞數據時,通常會將數 據放在面向字段的系列字節結構中,以便用任何語言編寫的應用程序都能夠訪問這些數據。但是,如果您只使用 Java 語言 ,則最好將數據放在面向對象的 Java 環境中,並在基於 CISS 的 Java 程序之間傳遞 Java 數據對象。本系列文章將討論 CICS TS V4.2 或其更高的版本中可用的 CICS Java 環境,同時旨在讓開發 CICS 程序的 Java 程序員使用該環境。本系列 文章對 CICS 系統程序員和開始使用 Java 的 CICS 應用程序程序員也很有幫助。

從 1999 年的初始 Java 支持開 始,已啟用 CICS 來控制 JVM 池,在該池中,每次只會將一個基於 Java 的 CICS 事務分派給 JVM(因此需要一個 JVM 池 )。在 CICS TS V4.1(2009 年 6 月)中,CICS 引入了 JVMServer 資源。該資源是一個 JVM,在該 JVM 中可同時分派多 個基於 Java 的 CICS 事務。最初,只有系統功能才可以使用 JVMServer。但是,自 CICS TS V4.2(2011 年 6 月)起, JVMServer 可運行使用 Apache Software Foundation 開源 Web 服務引擎 Axis2 的 Java 程序,也可用於使用開放服務網 關協議 (Open Services Gateway initiative, OSGi) 的客戶編寫的應用程序。

2010 年 6 月 CICS TS V4.1 提供 了 CICS Dynamic Scripting Feature Pack,這是 Project Zero 技術 的實現,提供了情景 Web 應用程序的敏捷應用程序 開發。Feature Pack 為 Web 工件提供服務,支持使用 PHP 和 Groovy 腳本語言,並且具有一個模型,可快速實現供情景 應用程序訪問的數據庫,這使定義和呈現具有 REST 接口的數據庫表變得非常簡單。Feature Pack 在 CICS JVMServer 中 實現,並且有一個到 Java 的橋接,提供了對 CICS 程序和資源的訪問。

除 Java 可用作 CICS 服務器端編程語言 外,各種非 CICS 環境中運行的 Java 客戶端也可以調用在 CICS 中運行的程序。CICS Transaction Gateway 提供了一種 使用 Java Enterprise Edition (JEE) Java Connector Architecture (JCA) 將信息從 Java 客戶端傳遞到 CICS 的方式 。此外,WebSphere Optimized Local Adapter (WOLA) 提供了從 WebSphere Application Server 到 CICS 的跨內存通信 ,兩者可在同一 z/OS Logical Partition (LPAR) 上運行。

當在 CICS 所提供的不同 Java 環境之間傳遞數據,或 者是將數據從 Java 客戶端程序傳遞到基於 CICS 的程序時,可使用高達 32K 的通訊區域 (COMMAREA),或者是使用通道和 容器來傳遞數量較大的數據(2005 年添加了通道和容器)。COMMAREA 和通道與容器可供 COBOL 和 CICS 支持的其他面向 字段的語言使用,並且這些通信機制支持 Java 程序與在 CICS 環境中運行的過程面向字段語言進行交互。對於在多個 CICS 所提供的 JVM 環境中實現的應用程序來說,傳遞對象並不是 Java 友好的,因此需要更多步驟來使用 CICS 程序到程 序通信機制。

例如,您可能想要在 CICS 所提供的 OSGi 環境中實現基於 Java 的業務邏輯,以便利用 OSGi 的功 能。您可能想要使用 CICS 所提供的 Axis2 環境(在不同的 JVM 服務器中運行)將這些基於 Java 的業務功能顯示為 Web 服務。您也可能想要使用 CICS Dynamic Scripting(另一個 JVM 服務器)快速向基於 OSGi 的業務邏輯提供一個 Web 接 口,或者是使用 CICS Transaction Gateway(在 CICS 外的 JVM 中運行)提供到非 CICS Java 客戶端的基於 OSGi 的業 務邏輯訪問。

本文介紹了在 CICS 環境的不同 JVM 中運行的 Java 程序之間傳遞對象的一種 Java 友好方式,或者 在不同 CICS 區域中的 CICS 所提供的 Java 環境之間傳遞對象的一種 Java 友好方式。本文提供關於傳遞 Java 對象的背 景信息,並闡述使用 CICS 所提供的各種 Java 環境的原因。

目標

在 CICS 環境中的應用程序之間傳遞數據 的傳統方式是:將數據放到面向字段的系列字節結構中,並將此結構放到 COMMAREA 中或 CICS 通道的 CICS 容器中。當使 用 EXEC CICS LINK PROGRAM() 命令調用目標程序時,會傳遞 COMMAREA 或通道。對於 COBOL、IBM Assembler 和其他支持 CICS 的語言,不需要編集數據。但是,對於基於 CICS 的 Java 程序,必須將 Java 數據對象編集到面向字段的系列字節 結構中,或從該結構取消編集這些數據對象。有實用工具可生成進行編集的代碼,並且 COBOL 數據布局用於輸入到實用工 具。如果您的 CICS 應用程序使用的是多種編程語言,值得對 Java 進行一些特別操作,以支持基於 CICS 的 Java 程序與 使用其他語言編寫的 CICS 程序進行互操作。

對於在 CICS 所提供的 Java 環境中運行的 Java 程序來說,可以像 往常一樣使用 Java,初始化類並調用一些方法。如果您想要使用多個 CICS 所提供的 Java 環境來利用每種環境的優勢, 那麼您可能想獲得 CICS 的幫助來傳遞 Java 數據。對於跨多個CICS 所提供的 Java 環境的基於 CICS 的 Java 應用程序 來說,您需要使用一種 Java 友好的方式在這些環境之間傳遞 Java 數據對象。對於訪問由 Java 程序(在不同的 CICS 所 提供的 Java 環境中)所提供功能的 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");
    
// and after the program return
    
String errorString = (String)transporter.getObject("error");
If (errorString != null) {
    processError();
} else {
    Manager newManager = (Manager)transporter.getObject("mgr");
    // process/display Manager object that was returned
}

對於返回數據的響應 Java 程序來說,如果提供響應像下列內容一樣簡單,那麼提供響應對於 Java 程序員來說 也非常簡單:

DDW_CicsObjectTransporter transporter = 
    new DDW_CicsObjectTransporter();
Employee emp = (Employee)transporter.getObject("emp");
// work with employee object
transporter.removeObject("abc");    // can remove transport object
Manger mgr = new Manger("Joe Bloggs");
transporter.addObject("mgr",mgr);  // add new or changed objects
return;

本系列的第 2 部分將介紹如何支持上述用例,並提供名為 DDW_CicsObjectTransporter 的示例 Java 類 來支持上述交互。此外,與在使用 CICS TG 的 Java 客戶端和 CICS TS 之間傳輸對象一起使用時,會提供 DDW_CicsTg_ObjectTransporter 對象。

CICS 提供的 Java 環境

每種 CICS 提供的 Java 環境都有自己的優 勢,因此您可能想對一個應用程序使用多種環境。如上所述,本系列文章的目的是提供一種框架來簡化在不同的環境之間傳 輸 Java 對象的方式。

池化的 JVM

從 1999 年開始,CICS 提供了池化的 JVM 環境。您指定可以在池中存在 的最大 JVM 數量,然後 CICS 使用 JVM 來運行 CICS Java 程序。在池化的 JVM 環境中,CICS 每次向 JVM 分派一個 Java 程序。盡管本練習提供了良好的程序隔離,但這通常不是 Java 程序的考慮事項,並且每次在 CICS 區域中可運行的 最大 Java 程序數量都相當於 JVM 池中的 JVM 數量。

當 CICS 收到請求時,它會啟動一個程序來提供響應。因此 ,您需要通過 PROGRAM 定義來定義 CICS 的 Java 程序,在該定義中,要指定調用的初始 Java 類、想要運行的存儲密鑰 (CICS 或 USER 密鑰)以及指定此程序所需的 JVM 特征的 JVMProfile 文件,包括 CLASSPATH、LIBPATH、JVM 堆大小和 DB2 驅動程序等。

當分派 Java 程序時,CICS 從 JVM 池中選擇一個 JVM,該池與程序的 PROGRAM 定義 (JVMProfile 文件和執行密鑰)指定的需求相匹配。然後在該 JVM 中啟動 Java 程序。Java 程序從方法中指定的類開始 ,該方法具有 public static void main(CommAreaHolder ca) 或 public static void main(String[] args) 簽名。

Java 程序使用等同於 EXEC CICS 命令的 Java 等價物(稱為 JCICS 類)與 CICS 進行交互。除了與 CICS 資源進 行交互和調用以其他語言編寫的 CICS 程序,Java 程序可與 DB2 或 WebSphere MQ 進行交互並進行其他具體 Java 工作。 Java 程序應該總是使用 CICS 設備,如果它們存在(比如 CICS DB2 連接),以便 CICS 可以控制工作單元,這是 CICS 擅長的許多領域之一。

JVM 的內存來自 CICS 區域地址空間。CICS TS V4.1 或早期版本使用 31 位 JVM,因此 CICS 區域地址空間有 31 位存儲,這意味著只有少量 JVM 可在單個 CICS 區域控制下運行。多個 CICS 區域為一個常見的 業務功能提供服務的情況很常見,因此,在所需的並發性比單個 CICS 區域提供的並發性更多的情況下,可以啟動多個 Java Owning Regions (JOR) 並在其中分派工作。CICS TS V4.2 使用 64 位 JVM,該 JVM 略高於 64 位存儲,因此幾個 JVM 可位於由單個 CICS 區域維護的 JVM 池中,從而減輕或消除多個 CICS 區域為較大 Java 工作負荷提供服務的需求。

在 CICS TS V4.2 中,現在可以在 JVM 服務器環境中運行客戶編寫的程序(將在下一部分介紹)。在 CICS TS V4.2 通知信中,IBM 聲明將在未來的 CICS 版本中刪除池 JVM 環境。

CICS JVM 服務器環境

CICS TS V4.1 (2009 年 6 月)引入了 JVMSERVER 資源,該資源提供了 JVM 服務器環境。此 JVM 服務器環境支持每次向同一 JVM 分派 多個 CICS Java 任務。當定義 JVMSERVER 資源時,您指定可向單個 JVM 分派的最大數量(1 至 256)的並發 Java 任務 。您可以在單個 CICS 區域控制下運行多個 JVM 服務器,但是由單個 CICS 區域控制的分派到所有 JVM 服務器的總任務數 不能超過 1024。在 CICS TS V4.1 中,只有 CICS Dynamic Scripting(如下所述)和 SupportPac CN11(為 WebSphere XD Compute Grid 提供 batch container)使用 JVM 服務器環境。CICS TS V4.2(2011 年 6 月)更改為 Java 6.0.1 64 位環境,添加了基於 OSGi 的 JVM 服務器和基於 Axis2 的 JVM 服務器(在該服務器中可部署用戶編寫的 Java 程序)。

基於 OSGi 的 JVM 服務器環境

CICS TS V4.2 中基於 OSGi 的 JVM 服務器環境要求使用 OSGi 捆綁包打包 Java 程序。OSGi 是 Java 的動態模塊系統,並且所有主要 Java 應用程序服務器一直都在采用它。OSGi 中的模塊化提供 了一種將系統劃分為獨立模塊(稱為捆綁包)的機制,單獨打包並部署這些捆綁包,並且每個包都有自己獨立的生命周期。 此模塊化支持您將復雜的應用程序劃分為獨立的部分,以方便進行部署、測試和維護。

沒有 OSGi,可通過指定 CLASSPATH 環境變量使 Java 類和 JAR 文件可供 JVM 使用。此 CLASSPATH 是靜態的,並且不會更改 JVM 的使用壽命。憑 借 OSGi,可從 JVM 動態地添加和刪除 Java 類。

OSGi 還提供了內存服務注冊表,可從中找到其他模塊,並將它們 綁定到注冊服務。由模塊組成的組件可在 OSGi 服務注冊表中發布,並且在該注冊表中,可找到其他模塊並將它們綁定到那 些服務。組件可顯示捆綁包中的所有類或者顯示具體接口。同樣,組件可在其他包或模塊上聲明其依賴性。模塊可包含在安 裝、卸載或升級模塊時調用的生命周期方法。您還可以提供擴展點以允許其他人擴展模塊的功能性。

可將一個或多 個 Java 包(包含類)分組到一個 OSGi 捆綁包中。CICS 環境允許您將一個或多個 OSGi 捆綁包編組為一個 CICS BUNDLE 。當安裝、啟用、禁用和棄用 CICS BUNDLE 時,CICS BUNDLE 中的 OSGi 捆綁包經歷相應的 OSGi 生命周期更改,因此允 許您在正在運行的 CICS JVM 服務器中動態地添加和刪除 Java 類和包。可使用 CICS Explorer 顯示 OSGi 捆綁包和 CICS BUNDLE 的生命周期狀態。基於 OSGi 的 JVM 服務器應該考慮 CICS 中基於 Java 業務邏輯的戰略方向。

當 CICS 收到請求時,它會啟動程序以提供響應。因此,您需要通過 PROGRAM 資源定義來定義 CICS 的 Java 程序。對於將在 JVM 服務器中運行的基於 CICS 的 Java 程序,您必須定義指定 CONCURRENCY(REQUIRED) 的 PROGRAM 定義、CICS 的存儲密鑰 、該程序運行的 JVMSERVER 資源的名稱,以及引用 Java 程序的 OSGi 注冊表項的名稱。

當在 OSGi 捆綁包中打包 Java 程序時,對於開始執行 CICS 的那些類來說,應在指定類開始執行的位置的捆綁包清單中包含 CICS-MainClass= 關鍵 字。CICS-MainClass= 關鍵字使得 CICS OSGi 環境能夠在 OSGi 注冊表中注冊指定的類。與池 JVM 一樣,在具有 public static void main(CommAreaHolder ca) 或 public static void main(String[] args) 簽名的方法的指定類中,開始執行 Java 程序。

與 CICS 的池化的 JVM 環境一樣,Java 程序使用等同於 EXEC CICS 命令的 Java 等價物(名為 JCICS 類)與 CICS 進行交互。除了與 CICS 資源進行交互並調用以其他語言編寫的 CICS 程序外,Java 程序還可以與 DB2 和 WebSphere MQ 繼續交互,並進行其他具體 Java 工作。Java 程序應該總是使用 CICS 設備,如果這些(比如 CICS DB2 連接)存在的話,以便 CICS 可以控制工作單元(這是 CICS 擅長的許多領域之一)。

JVM 服務器的內存來自 CICS 區域地址空間。CICS TS V4.2 使用 64 位 JVM,它高於 64 位存儲,因此在單個 CICS 區域中可存在多個 JVM 服務 器。在一個 JVMServer 中,CICS 可分派 1 到 256 個並發任務,默認值為 15。指定區域中所有 JVM 服務器的所有並發任 務總數不能超過 1024。

基於 Axis2 的 JVM 服務器環境

從 CICS TS V3.1(2005 年 3 月)開始,CICS 啟 用了將基於 CICS 的程序顯示為 Web 服務的功能,在此之前,是使用 SupportPac(2003 年 3 月) 或通過 SOAP Feature for CICS(2003 年 9 月)實現此功能。Web 服務支持最初由 CICS TS V3.1 提供,支持顯示使用 CICS COMMAREA 或通道 和容器(將在下面介紹它們)調用的 CICS 程序。

作為將基於 Java 的 CICS 程序作為 Web 服務顯示的另一個選項 ,CICS TS V4.2(2011 年 6 月)包含 Axis2,Axis2 是一個 Apache 開源 Web 服務引擎,由 CICS 提供,用於在 Java 環境中處理 SOAP 消息。在 CICS 中針對基於 Java 的 Web 服務使用的 Axis2 技術提供了更高的 zAAP 專業處理器利用率 。在某些情況下,可將 Java 和 XML 解析卸載到專業處理器,比如 System z Application Assist Processor (zAAP),而 不是在 IBM 大型機的一般處理器上進行工作。

CICS 中的 Axis2支持允許您顯示基於 CICS 的 Java 程序,並使用 Java 語言開發 Axis2 風格的頭處理程序。Axis2 支持 Web 服務和處理程序的熱部署、異步 Web 服務、Message Exchange Pattern (MEP)(WSDL 2.0 的一部分)、WSDL 1.1 和 2.0,並使用作為 JAX-WS 一部分的注釋,將 Plain Old Java Objects (POJOs) 顯示為 Web 服務。構建 Axis2 工件的工件是 Java 6 Java Standard Edition (JSE) 的一部分。

CICS 動態腳本

2010 年6 月,CICS 提供了 CICS Transaction Server Feature Pack for Dynamic Scripting。此 Feature Pack 在 JVM 服務器中運行並且是 Project Zero 技術的實現。Project Zero 的目標是提供敏捷 的編程環境,以支持程序員快速實現情景應用程序,比如針對臨時市場營銷工作的應用程序,或者是改進部分或團隊效率的 工具。

CICS Transaction Server Feature Pack for Dynamic Scripting 支持您快速提供 Web 頁面,並使用 PHP 、Groovy 和 Java 編寫應用程序。因為是在 Java 環境中實現 Feature Pack,所以還提供了到 Java 的橋接。從您的 PHP 或 Groovy 程序,您可要實例化 Java 類並調用這些類的方法。除了支持您了解 Java 的能力,Java 橋接還支持 PHP 和 Groovy 腳本使用 JCICS 類並控制 CICS 資源(JCICS 類是 EXEC CICS 命令的 Java 等價命令)。Project Zero 還提供了 Zero Resource Model (ZRM),ZRM 提供了一種快速方式來定義表格並訪問這些表格中的數據,方法是使用 REST 接口或者 是位於集合和這些集合的成員之上的簡單 API。您還可以使用 SQL 訪問數據庫信息,支持 DB2 和 Derby 數據庫。

通過 HTTP 請求可以訪問 CICS 動態腳本應用程序,這些請求通常是請求 Web 頁面(HTML、JavaScript 或級聯樣式表)、 PHP 或 Groovy 腳本調用或者是 REST 服務。

盡管您可以使用 PHP 或 Groovy 編寫整個應用程序,但是只可以通過 指向 CICS 動態腳本應用程序的 HTTP 請求訪問這些應用程序的業務邏輯。因此,最佳方法是在基於 OSGi 的 JVM 服務器 中運行基於 Java 的業務邏輯,以便可使用任意 CICS 互操作性選項從任意 CICS 設備或客戶端訪問業務邏輯。可以使用 CICS 動態腳本快速提供基於 OSGi 業務層的表示層。

CICS Transaction Server Feature Pack for Dynamic Scripting V1.0 在 CICS TS V4.1 中運行,而 CICS Transaction Server Feature Pack for Dynamic Scripting V1.1 在 CICS TS V4.2 中運行。

CICS Transaction Gateway

CICS Transaction Gateway (CICS TG) 利用多種客戶端 編程語言(比如 C/C++、Java、Microsoft .NET、Microsoft Visual Basic、PowerBuilder 和基於工作站的 COBOL)向 CICS 提供安全事務通信。

對於在非 CICS 環境中運行的 Java 客戶端,CICS TG 實現 Java Connector Architecture (JCA),這定義從 Java 程序到 Enterprise Information Systems (EIS)(比如 CICS、IMS、JDEdwards、 PeopleSoft 和 SAP)的標准通信方式。JCA 定義使用名為 Common Client Interface (CCI) 的標准 API 來實現托管或非 托管連接的方式。使用托管連接,Java Enterprise Edition (JEE) 應用程序服務器可提供連接管理,控制事務,並增強安 全上下文。此標准 CCI API 允許 Java 程序員使用常見 API 訪問不同 EIS 的數據。

可以多種配置設置 CICS TG, 有關更多信息,請參見 CICS TG 信息中心。

對於使用 Java 編寫的 CICS 客戶端程序和在 Java 中實現的 CICS 服 務器端業務邏輯場景,您可以使用本文中介紹的技術,將 Java 數據對象從 CICS TG 客戶端程序傳遞到實現業務邏輯的基 於 CICS 的 Java 程序。

在 CICS  程序之間傳遞數據

在 CICS 程序之間傳遞數據的 CICS 所提供的技 術包括傳遞 COMMAREA 或傳遞通道和容器。

COMMAREA

在 CICS 的 40 年歷史的大部分時間中,在構成應用程 序的程序之間傳遞數據的標准方式是名為通訊區域 (COMMAREA) 的存儲塊,它最多為 32 KB。過去,CICS 主要支持過程語 言,比如 COBOL 和 PL/I,使用這種語言可以簡單地定義 COMMAREA 面向字段的數據布局。在運行時,使用過程語言編寫的 程序將數據放置到數據布局中,並將其鏈接到另一個 CICS 程序,這將傳遞 COMMAREA(LINK 是程序調用的 CICS 等價物) 。LINK 方法旨在支持在基於 CICS 的程序之間傳遞數據,這些程序以相同或不同的程序語言實現並在相同或不同的 CICS 區域中的運行。

圖 1 顯示了傳遞 COMMAREA 的程序示例。盡管這對於處理固定大小字段(傳遞的總數據大小小於 32KB)的過程語言來說非常方便,但是 COMMAREA 不是在 Java 程序之間傳遞數據的簡單方式。最接近此面向字段的系列字 節的 Java 構造是字節數組。但是,Java 字節數據不包括訪問從 75 到 100 的字節,例如,通過名為 customerAddress 的名稱。由 IBM z/OS Java 提供的 JZOS 實用程序等工具和 Rational Application Developer 的向導允許您從 COBOL 數 據布局生成 Java 數據對象。如果您需要在 Java 和另一種 CICS 編程語言之間移動,那麼這些工具和向導是一個不錯的解 決方案。它們為構造中的每個字段提供 Java getters 和 setters,並且在 Java 程序需要將數據傳遞到 CICS 或從 CICS 獲得數據時提供 getBytes()/setBytes() 或 getByteBuffer()/setByteBuffer() 方法。

當在 Java 程序之間傳遞 數據時,如果您處於 CICS Java 環境中,那麼可以使用常規 Java 方法,即實例化對象(比如 CheckingAccount),並調 用對象(比如 computeInterest())的方法。如果 Java 應用程序橫跨不同的 CICS Java 環境,或者是基於 Java 的應用 程序橫跨多個 CICS 區域,那麼應用程序可在這些不同的 CICS 所提供的 Java 環境中使用 CICS LINK 命令調用各種 Java 程序。使用 COMMAREA 是一種在這些 Java 程序之間傳遞數據的方式,但是它需要從 Java 對象到面向字段的系列字節結構 (字節數組)的轉換。此外,當鏈接到在另一種 CICS Java 環境中運行的目標 Java 程序時,需要在鏈接到的目標 Java 程序中從字節數組轉換為一個或多個 Java 對象。

Java 程序員可序列化他們想要傳遞的對象(這會將對象轉變為一 個字節數組),通過 COMMAREA 傳遞系列化的對象,並在目標 Java 程序中取消對象的序列化。但是,您可能想要傳遞多個 對象,並且您可能需要突破 32KB 的限制。此外,向兩個方向發送 COMMAREA 時,它通常具有相同的長度。

通道和容器

自 CICS TS V3.1(2005 年 3 月)開始,對於程序到程序通信,現在可將大量數據放置到與具體通 道相關的命名容器集合中。可在指定的通道中防止任意數量的容器,然後將通道(及其中的所有容器)傳遞到目標程序,如 圖 2 所示。CICS 不限制容器的大小或通道中容器的數量。但是,根據事務達到率和程序的混合,實際上存在限制,因為容 器的空間來自 CICS 區域存儲。就一般而言,您應該使用應用程序需要的容器,但是不要忽略並浪費空間,否則應用程序可 能會造成 CICS 存儲不足的情況。

從圖 2 可以看出,容器具有名稱且可以為任意大小。從圖 2 無法完全了解它,但是如果將容器從程序 A 發送到程序 B ,並且程序 B 不進行任何修改,則 CICS 知道不需要將容器返回到程序 A,因為程序 A 已經有了容器內容的副本。如果程 序 B 從程序 A 收到容器,則程序 B 可更改數據和容器大小。對於過程編程語言,每個容器的數據布局可包含 0 或更多字 段。當在 Java 和過程語言之間傳遞數據時,可使用 JZOS 實用工具或 Rational Application Developer 向導從 COBOL 中定義的容器布局生成一個 Java 對象。這些生成的 Java 對象支持您使用 getters 和 setters 從 Java 訪問數據,或者 是使用常規的過程面向字段數據布局從過程語言訪問數據。JZOS 實用程序和 Rational Application Developer 向導已經 在 COMMAREA 部分進行了介紹。

有兩種類型的容器:CHAR 和 BIT。CHAR 容器適用於字符數據,如果需要的話, CICS 可在 CHAR 容器上執行代碼頁面轉換。BIT 容器適用於二進制數據,與 Java 字節數組類似。

從圖 2 還可以 看出,可以將通道和容器看作關聯數組,這類似於 Java hashtable,其中通道類似於容器數組。可通過根據名稱請求容器 來訪問容器的內容。

如果正在非 CICS 環境中使用 Java 客戶端與基於 CICS 的程序進行交互,那麼應該使用 CICS TG V7.1 或其更高版本,並使用 IPIC 作為通信類型,與 CICS TS V3.2 或其更高版本進行通信,Java 客戶端還可以使用 通道和容器。

在 CICS Java 程序之間傳遞 Java 對象

基於上述信息,您可能已經得出這樣一個結論:如果 您的目標是將數據從在 CICS 提供的 Java 環境中運行的 Java 程序傳遞到在另一種 CICS 提供的 Java 環境中運行的 Java 程序,則可使用 CICS 通道和容器傳遞序列化 Java 對象。這一過程避免了:

為在 Java 程序之間傳遞的數據創建一個 COBOL copybook 布局

運行實用工具來根據 COBOL copybook 創建 Java 數據對象

Java 程序員了解 COBOL 的需要

在源代碼庫中維護所需 COBOL copybook 的需要

執行 COBOL copybook 生產周轉的需要

如果傳遞數據的內容發生變化而更新 COBOL copybook 的需要(以及浏覽後續存儲庫更新和生產周轉的需要)

一般 Java 程序員都了解對象序列化,在 Internet 上有一些關於 Java 對象序列化代碼的示例。序列化 Java 對象並 在通道和容器中傳遞它們提供了一種在基於 CICS 的 Java 程序之間傳遞 Java 對象的簡單方式。這些程序可在不同的基於 CICS 的 Java 環境中運行,或者是在由不同 CICS 區域控制的 Java 環境之間運行。鏈接的基於 CICS 的 Java 程序(或 CICS TG 客戶端 Java 程序)可序列化傳遞到系列容器中的 Java 對象。然後,所鏈接的 Java 程序可取消對象的序列化, 根據需要修改它們,序列化返回到容器的修改對象,然後將它傳遞回鏈接程序。

如果您正在使用基於 CICS 的 Java 程序中的 Java 類,可像往常一樣使用它們,實例化對象並調用對象的方法。僅當您想在不同的 CICS Java 環境之間移動 數據以利用其各自優勢、將數據移動到另一個 CICS 區域中的 CICS Java 環境或者將應用程序擴展到多個 CICS Java 環境 以進行工作負荷管理或獲得應用程序可用性時,可能才需要在 CICS Java 環境之間傳遞 Java 對象。

本系列文章的 第 2 部分將介紹如何使用通道和容器來傳遞 Java 數據對象,描述在 CICS 應用程序之間傳遞數據的通用框架。第 2 部分 還將提供執行 Java 對象序列化、取消序列化的 Java 類和 LINK 功能,允許您集中精力於應用程序的 Java 方面而不是在 不同 CICS Java 環境之間傳遞 Java 對象的細節。

結束語

本文章介紹了 CICS 提供的不同 Java 環境:

傳統的池化的 JVM,其中每次只有一個基於 CICS 的 Java 事務在 JVM 中運行。

CICS JVM 服務器環境,其中每次可向同一 JVM 分派多個 Java 程序請求。下面是使用 JVM 服務器(但是無法混合到一 個 JVM 服務器中)的 CICS 所提供的 Java 環境:

基於 OSGi 的環境,其中提供了 OSGi 動態模塊系統,具有下列功 能,比如動態向 JVM 中添加 Java 類,或從中刪除 Java 類,提供了 OSGi 注冊表,顯示了到 Java 模塊而不是模塊中所 有類的接口,並指定了模塊依賴性來消除常見的 ClassNotFound 問題。

Axis2 開源 Web 服務引擎,支持您使用 JAX-WS 注釋快速且輕松地顯示 POJO,並以 Axis2 風格編寫處理程序。

CICS Dynamic Scripting,提供了使用 PHP 和 Groovy 腳本語言快速開發 Web 應用程序的方式。PHP 和 Groovy 解釋 器在 Java 中實現,因此有 Java 橋接支持您實例化 Java 對象並調用 CICS 程序。

CICS Transaction Gateway,促進從在非 CICS 環境中運行的 Java 程序到 CICS TS 程序的通信。

本文還介紹了在基於 CICS 的程序之間傳遞數據的兩種方式:

COMMAREA:高達 32 KB 的數據塊

通道和容器:多個已命名的任意長度(容器)的數據塊編組到一個已命名的通道中

最後,本文介紹了如何在各種 CICS 提供的 Java 環境之間傳遞 Java 數據對象,方法是使用常規的 CICS 通道和容器 機制,將序列化的 Java 數據對象放置到容器中,然後根據需要對它們進行取消序列化。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved