Welcome 微信登录

首页 / 软件开发 / JAVA / CICS Java环境简介

CICS Java环境简介2013-09-23 IBM Weiand Dennis简介

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 returnString 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 objecttransporter.removeObject("abc");// can remove transport objectManger mgr = new Manger("Joe Bloggs");transporter.addObject("mgr",mgr);// add new or changed objectsreturn;
本系列的第 2 部分将介绍如何支持上述用例,并提供名为 DDW_CicsObjectTransporter 的示例 Java 类 来支持上述交互。此外,与在使用 CICS TG 的 Java 客户端和 CICS TS 之间传输对象一起使用时,会提供 DDW_CicsTg_ObjectTransporter 对象。