事务中间件 CICS 原理及应用开发

2023-11-05

CICS Transaction Gateway
CICSChina  |   Aug 24 2011  | Comments (0)  |  Visits (410)
1.1 什么是CTG
1.1.1 概述
CICS系统是IBM大型机上的重要的交易处理系统,并且由于大型机的特殊性,导致CICS的已有应用程序对分布式平台开放不够,难以重用以往的应用程序。因此,CICS与分布式系统的交互,即外界如何访问CICS传统应用,成为一个重要的课题。
    而CTG(CICS Transaction gateway,以下简称为CTG),CICS交易网关,是分布式平台连接到CICS的首选工具,它具有高性能,高安全性,高可扩展性等特性。
    CTG与CICS的连接属于直接相连的方式,几乎不用修改CICS的已有应用,即可被外界访问。Web Services 同样可以实现与CICS的连接,但是相比于Web Services,CTG有以下优势:
    (1)没有复杂的标准,技术相对成熟。
    (2)利用已有的应用程序接口,很少需要对CICS程序进行修改。
本文中实例所使用的CICS Transaction Gateway软件为V7.2 for Windows版本。

1.1.2 CTG结构图
 相关概念介绍:
1. Gateway Daemon (网关守护程序):网关守护程序用于监听远端客户程序的请求,并且可以管理线程和网络连接,以达到优化的目的。网关守护程序中的一个重要组件是协议处理器(Protocol Handler),用于处理远端应用程序的请求,可以支持TCP/IP和SSL协议。
2. Client Daemon (客户机守护程序):客户机守护程序是开放平台CTG的重要组成部分,它提供一个本地接口,客户应用程序就通过这个接口连接到CICS,支持C,C++,.Net,COBOL等多种语言的应用程序。
3. IPIC driver (IPIC 驱动器):IPIC驱动器是CTG中的一个独立组件,作用类似于客户机守护程序,专用于IPIC方式连接到CICS。CICS在3.2版本中引入了IPIC(IP Intercommunication)的概念,用于CICS region之间的互连,这种连接是基于TCP/IP协议的,具体的IPIC概念请参考其他相关章节。从CTG V7.1版本以后,加入了对IPIC的支持。
4. CTGCFG tool(CTG configuration tool,CTG配置工具):CTG产品自带的图形化配置工具,用于设置ctg.ini配置文件中的属性,包括网关守护程序和客户机守护程序等的相关参数。配置客户端守护程序界面,如下图所示:
图像其中重要的几个参数描述如下:
(1) 服务器名称:一个8位长的字符串,定义一个独立于协议的服务器名称,客户端应用程序发到CICS的请求都要发到这个服务器。
(2) 协议:指定CTG所支持的各种网络协议,本章重点介绍TCP/IP协议。
(3) 主机名或IP地址:CICS所在的主机地址,可以指定主机名或IP地址。
(4) 端口:CICS端定义的TCPIPService所指定的端口,是客户端请求发送到CICS的接入点。

配置客户端守护程序界面,如下图所示:
图像 选中“启用协议处理程序”就能使图示的网关守护程序生效。
其中重要的几个参数描述如下:
(1)绑定地址:如果在此处指定某IP或主机名,就可以将协议处理程序绑定到上面指定的值;如果需要将协议处理程序绑定到任意地址,可以把此处留空不填。
(2)端口:安装CTG的服务器对外开放的CTG端口,默认为2006。

1.1.3 CTG编程接口
由于分布式系统架构的多样性,CTG支持一下三种连接方式:

1.    External Call Interface (ECI) 外部访问接口
ECI是简单的RPC式访问接口,用来调用(LINK) CICS中的应用程序,可以使用COMMAREA或channel作为数据接口,用于客户应用程序和CICS之间的数据交换。
    CICS将此种类型的访问看成是一种分布式程序调用(DPL : distributed program link )。客户端发来的请求由一个镜像交易CPMI进行处理,然后进一步调用到目标应用程序。
图像 2.    External Presentation Interface (EPI) 外部表现接口
EPI被用来调用基于3270终端的交易。使用这种接口时,CICS上面会自动安装一个虚拟的终端,此终端受CTG的控制,并且CICS将客户端发来的请求运行在这个虚拟终端上。这种接口只支持SNA协议。
 3.    External Security Interface (ESI) 外部安全接口
ESI是用来验证并且修改CICS外部安全管理器(例如RACF)所保存的安全信息,并且由于CICS支持方面的原因,目前只能通过SNA协议进行连接。
图像 1.1.4 CTG支持的网络协议
TCP/IP:配置最简单的方式。
SNA:必须和Communication Server搭配使用。
IPIC:CICS在3.2版本中引入了IPIC(IP Intercommunication)的概念,用于CICS region之间的互连,这种连接是基于TCP/IP协议的,具体的IPIC概念请参考其他相关章节。从CTG V7.1版本以后,加入了对IPIC的支持。
Namedpipe:命名管道,只支持Windows版本的CTG。
EXCI:只支持Z/OS版本的CTG。

1.1.5 CTG的一些注意事项
1.CTG不支持从CICS端主动发出的访问请求。这里有个问题比较容易引起误解,就是CTG发送请求到CICS,CICS的返回信息可以正常返回给CTG,这种不是CICS主动发起的请求。
2.CTG不会做数据的转换,这个工作需要在应用程序或CICS中处理。

1.2 两种模式
    CTG的有两种运行模式,这两种模式是根据CTG以及客户应用的拓扑结构来区分的。具体是哪种模式取决于客户应用程序的部署位置,分别为本地模式和远程模式。

1.本地模式(Local Mode,两层结构)
图像 在本地模式下,客户应用程序与安装CTG的server为同一台机器。在客户应用程序对CICS发送请求的时候,不需要经过网关守护程序,而是直接发送到CICS端,因此,整个体系架构可以看作两层的结构。这种模式下,根本无需启动网关守护程序,对CICS的请求直接发送到客户端守护程序。
在客户应用程序中的ECI请求中仍需要指定URL参数为local,即ConnectionURL = "local://" 和PortNumber = 0。

2.    远程模式(Remote Mode,三层结构)
图像 在远程模式下,客户应用程序与安装CTG的server为不同的机器,甚至不同的系统平台。在这种模式下,必须要配置并且启动网关守护程序,网关守护程序介于客户应用程序和CICS之间,整体构成三层的结构。
在客户应用程序的ECI请求中需要指定URL参数为CTG所在机器的IP地址,即ConnectionURL = "XXX.XXX.XXX.XXX" 和PortNumber = XXX。

从另外一个角度对两种模式的诠释,见下图:
图像图像 1.3 CTG连接到CICS实例
1.配置CICS region
        1. Set the SIT parameter TCPIP=YES.
        2. Install the following:
             –    CICS-supplied transient data queue CIEO, in group DFHDCTG
             –    Transaction CIEP in group DFHIPECI
             –    Program DFHIEP in group DFHIPECI
       3. Add a TCP/IP listener to CICS. Use the following CEDA command to define a TCPIPSERVICE in a group:
            –    CEDA DEF TCPIPSERVICE(service-name) GROUP(group-name)
       4. Use the following command to install the TCPIPSERVICE definition:
            –    CEDA INS TCPIPSERVICE(service-name) GROUP(group-name)
Attribute Description
POrtnumber The port on which the TCP/IP service listens.
PRotocol The protocol of the service is ECI.
TRansaction The transaction that CICS runs to handle incoming ECI requests. Set it to CIEP.
Backlog The number of TCP/IP requests that are queued before TCP/IP starts to reject incoming requests.
Ipaddress The IP address (in dotted decimal form) on which the TCPIPSERVICE listens. For configurations with more than one IP stack, specify ANY to make the TCPIPSERVICE listen on all addresses.
SOcketclose Whether CICS should wait before closing the socket after issuing a receive for incoming data on that socket. NO is recommended for ECI connections, to ensure that the connection from the Client daemon always remains open.
ATtachsec Specifies the level of attach-time security required for TCP/IP connections.
 
 2.配置CTG 
图像
 3.测试连接

1.4 应用程序开发
CTG提供多种编程接口,包括:
(1) J2EE Connector Architecture(JCA) JAVA API,即J2EE连接器架构JAVA应用程序接口,这是推荐的编程接口。
(2)基础的JAVA,C,COBOL,COM等编程接口。

1.    Java 应用程序开发
图像 图像 2.    JCA 应用程序开发

        JCA(J2EE Connector Architecture) defines a standard architecture for connecting the Java 2 Platform Enterprise Edition (J2EE) platform to heterogeneous Enterprise Information Systems (EIS). Examples of an EIS include transaction processing systems (such as the CICS TS) and Enterprise Resource Planning systems (such as SAP).
        A resource adapter is a middle-tier between a Java application and an EIS, which enables the Java application to connect to the EIS. A resource adapter plugs into application servers supporting the JCA.
        JNDI: The Java Naming and Directory Interface (JNDI) is part of the Java platform, providing applications based on Java technology with a unified interface to multiple naming and directory services.
        J2C Connection Factory: The connection factory provides connections to the Enterprise Information System (EIS). It operates the connection management of JCA.
        Common Client Interface (CCI) : The CCI defines a common API for interacting with resource adapters. It is independent of a specific EIS. A Java application interfaces with the resource adapter using this API.
        System contracts: A set of system-level contracts between an application server and an EIS. These extend the application server to provide the following features: (Connection management, Transaction management, Security management). These system contracts are transparent to the application developer. That is, they do not implement these services themselves.
        Resource adapter deployment and packaging: A resource adapter provider includes a set of Java interfaces/classes as part of the resource adapter implementation. These Java interfaces/classes are packaged together with a deployment descriptor to create a Resource Adapter Archive (represented by a file with an extension of rar). This Resource Adapter Archive is used to deploy the resource adapter into the application server.
图像         1. Look up a ConnectionFactory for the ECI resource adapter.
        2. Create a Connection object using this ConnectionFactory. A Connection is a handle to the underlying network connection to the EIS. Specific connection properties, such as a user name and password, can be passed using an ECIConnectionSpec object.
        3. Create an Interaction from the Connection. Specific interaction properties such as the transaction identifier can be passed using an ECIInteractionSpec object. The call to the EIS is initiated by invoking the execute() method on the interaction, passing data as input and output records.
        4. After the required interactions have been processed, the interaction and connection should be closed.

1.5 应用举例

1.5.1 简单Java应用
public class CTGdemo {
         ... Java code ...

         // Program name
         String strProgram = "EC01";
         // Port number
         int iPort = 2006;
         /*
         * Use the extended constructor to set the parameters on the
         * ECIRequest object
         */
         eciRequestObject =
         new ECIRequest(ECIRequest.ECI_SYNC,      //ECI call type
                        strChosenServer,          //CICS server
                        null,                     //CICS userid
                        null,                     //CICS password
                        strProgram,               //CICS program to be run
                        null,                     //CICS transid to be run
                        abytCommarea,             //Byte array containing the
                                                  // COMMAREA
                        iCommareaSize,            //COMMAREA length
                        ECIRequest.ECI_NO_EXTEND, //ECI extend mode
                        0);                       //ECI LUW token

... Java code ...
}

          ... COBOL code ...
     * Initialize commarea
          MOVE SPACES TO DFHCOMMAREA.
     * Invoke api to get system time
          EXEC CICS
              ASKTIME ABSTIME(WS-RAWTIME)
          END-EXEC.
     * Format
          EXEC CICS
              FORMATTIME ABSTIME(WS-RAWTIME)
                         DDMMYY(LK-DATE-OUT)
                         DATESEP('/')
                         TIME(LK-TIME-OUT)
                         TIMESEP(':')
          END-EXEC.

          ... COBOL code ...
     *end of program


1.5.2 JCA应用
        Lab3 implements a simple internet banking.
        Users can query/save/withdraw their money from the web application.
图像

 

 

 

 1. Web client 
    (1)Operation Page s
          Operation Types: Query,Save,Withdraw
    (2)Return Page
        Result: Name, Gender, Balance

2. DATA FORMAT -- COMMAREA
    (1)SNNNNNNNNNNXXXXXXXXXX
    (2)S= 0,1,2(0-Query, 1-Save, 2-Withdraw)
    (3) NNNNNNNNNN --- UserName
         XXXXXXXXXX   ---  Money
struct CTGINPUT{            
    char signal;            
    char username??(10??);  
    char money??(10??);     
    char success;           
    char name??(12??);      
    char gender??(12??);    
    char balance??(12??);   
}; 
图像 图像
3. CICS Program – VSAM1
    (1)three operations 
          (Query,Save,Withdraw)
    (2) Operate the VSAM files

4. CICS DATA – VSAM files
    (1)VSAM file1--USERINFO
     (Username:10), (Account:6)
     (Name:12), (Gender:6)
    (2)VSAM file2--ACCOUNT
     (Account:6), (Balance:10) 
  图像
No Ratings 0

 

Comments (0)
There are no comments to display
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

事务中间件 CICS 原理及应用开发 的相关文章

  • SpringBoot 2 元素未绑定

    我的 Spring Boot 应用程序有一个文件 application yml 该应用程序不愿意运行 根据日志 元素 simulator geo b12 simulator geo b13 simulator geo b21 simula
  • Spark:用列的平均值替换数据框中的空值

    如何创建 UDF 以编程方式将每列中 Spark 数据框中的空值替换为列平均值 例如 在示例中 数据 col1 空值的值为 2 4 6 8 5 5 5 示例数据 col1 col2 col3 2 null 3 4 3 3 6 5 null
  • Java 的 RSA 算法库 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想为我的应用程序提供基于 RSA 算法的简单许可机制 有免费的 RSA 库吗 只需使用javax crypto and java sec
  • Log4j2 自动配置

    我在应用时遇到问题log4j2 xml自动配置正确 我认为这与我的文件夹排列有关 我在用着maven添加 log4j2 库并按如下方式安排我的项目 一个包含所有 通用 类的项目 供我的系统的服务器和客户端使用 另一个 核心 项目 服务器端应
  • 通过 Java Spring 构建 sitemap.xml [重复]

    这个问题在这里已经有答案了 我正在通过 Spring MVC 构建 sitemap xml XmlRootElement name urlset public class XmlUrlSet XmlElements XmlElement n
  • 合并两个 Jasper 报告

    我有一个带有下拉菜单的网络应用程序 用户可以从中选择报告可视化的类型 报告 1 报告 2 报告 3 等 根据所选的报告 Jasper 报告将在服务器上编译并以 PDF 格式的弹出窗口打开 在服务器端 我使用下面的代码以单独的方法实现每个报告
  • 这是重载,不同类中具有相同名称和不同签名的方法吗?

    如果我有以下 Java 代码 class A public int add int a int b return a b class B extends A public float add float a float b return a
  • android listviews:页眉和页脚视图

    在我的 ListActivity 中 我需要页眉和页脚视图 位于列表的顶部和底部 分别用作列表上的上一页和下一页按钮 因为我只想一次仅显示 20 个项目 我通过执行以下操作来设置头视图和脚视图 getListView addHeaderVi
  • 从 QueryDSL 谓词对象中获取参数

    我使用带有 Spring REST 端点的 QueryDSL 谓词对象来检索和查询参数值 GetMapping subjectId students RolesAllowed Roles PLATFORM ADMIN Roles USER
  • 如何在 Java 中通过 TLS v.1.2 创建安全的 TCP 连接

    我想通过 TLS v1 2 在两个系统之间创建通信 其中包含的信息是保密的 我想避免 https Web 服务调用 而直接想在 TCP 层执行消息交换 您能否建议如何实现此功能 以便我可以通过 TLS v1 2 安全地传输数据 EDIT 阅
  • 为什么在 Java 7 中使用方法重载时,自动装箱不会推翻可变参数?

    我们的 Java 项目中有一个 LogManager 类 如下所示 public class LogManager public void log Level logLevel Object args do something public
  • 在手机上单步执行 Android 代码 - 大行号差异

    我正在尝试调试与 Samsung Captivate Galaxy S 上的 ListView 相关的一些代码 我在代码中的某个位置放置了断点 当它停止时 我会在堆栈上返回几帧到 ListView 源 现在 我可以预期会出现一些不匹配的情况
  • 计算两个 Java 日期实例之间的差异

    我正在使用Java的java util DateScala 中的类并想要比较Date对象和当前时间 我知道我可以使用 getTime 计算增量 new java util Date getTime oldDate getTime 然而 这只
  • 为什么Java不支持C中的clrscr这样的函数?

    我有一个问题 对很多人来说可能听起来很愚蠢 但我不能停下来把它发布在这里 因为在互联网上找不到任何东西 为什么java没有我们在C中使用的clrscr之类的函数 如果我创建了一个基于用户输入反复迭代的 java 控制台应用程序 然后如果我想
  • java.util.Prefs 抛出 BackingStoreException - 为什么?

    我有一个系统可以缓存启动时 SOAP 调用的微小 简单结果 我需要实例能够在启动时重新加载其缓存 以防 SOAP 服务失效 并且还需要处理使用此缓存文件的多个实例的可能性 我选择使用java util prefs但是 Java 的内置自动同
  • gRPC 客户端重新连接逻辑导致服务器端打开重复流

    我有一个使用两个双向流的 gRPC 客户端 由于目前未知的原因 当我们每小时发送一次 keepAlive ping 时 会出现 onError 并带有statusRuntimeException在两个流上都被调用 为了处理重新连接 我在 j
  • 从邮件服务器读取发送的邮件

    我知道如何从 INBOX 文件夹中检索邮件 但现在我想从 SENT ITEMS 文件夹中检索邮件 我正在使用 imap 检索数据 让我知道我应该在此函数中传递什么参数才能从 SENT ITEMS 文件夹中获取邮件Folder folder
  • XStream:xstream 1.3.1 中具有属性和文本节点的节点?

    我想使用 XStream 将对象序列化为这种形式的 XML
  • @Transactional 方法调用另一个没有 @Transactional 注解的方法?

    我在 Service 类中看到了一个方法 该方法被标记为 Transactional 但它还调用同一类中的一些其他方法 这些方法未标记为 Transactional 这是否意味着对单独方法的调用导致应用程序打开与数据库的单独连接或挂起父事务
  • 整个程序可以是不可变的吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我熟悉不可变性并且可以设计不可变类 但我主要拥有学术知识 缺乏实践经验 请参考上面的链接图片 尚不允许嵌入 从下往上看 学生需要新地址

随机推荐

  • springBoot项目与Eureka注册中心整合时候关于版本兼容问题

    java lang NoSuchMethodError org springframework boot builder SpringApplicationBuilder Ljava lang Object V 如果在搭建springboo
  • python基础总结:1.7、模块

    python基础总结 1 7 模块 文章目录 python基础总结 1 7 模块 1 更多有关模块的信息 1 1 以脚本的方式执行模块 1 2 模块搜索路径 1 3 编译过的 python文件 2 标准模块 3 dir 函数 4 包 4 1
  • 区分电角度和机械角度

    电角度的区别和联系 以下内容均来自于网络搜索 这里仅用作于自己记录笔记 解释1 机械角度意为空间几何角度 相当于360 电角度是指通过一个完整的周期内电流完成变化 从电磁分布的角度来看 永磁体 或励磁 产生的磁场空间分布呈现周期性变化 一个
  • 《SQL中有关DQL、DML、DDL、DCL的概念与区别》

    SQL Structure Query Language 结构化查询语言是数据库的核心语言 是高级的非过程化编程语言 它功能强大 效率高 简单易学易维护 SQL语言基本上独立于数据库本身 使用的机器 网络 操作系统 基于SQL的DBMS产品
  • 解决使用layui上传文件时提示“请求上传接口出现异常”

    在做网站的过程中 需要用户上传文件 接收文件的接口已经写好 经过测试确定可用 现在需要在网页上提供一个文件上传的按钮 由于原生input type file 组件太丑 考虑使用现成的框架layui 跑到layui官网上查看官方文档进行学习
  • 2023必须掌握的10大Web3技术

    2023必须掌握的10大Web3技术 1 区块链技术 Blockchain Technology 2 智能合约 Smart Contracts 3 物联网 IoT Internet of Things 4 云计算 Cloud Computi
  • git报错fatal: unable to access ‘XXX‘: SSL certificate problem: certificate has expired

    一 问题 在git bash中执行git clone xxx之后 并没有弹出登陆框 而是报以下错误 git报错fatal unable to access XXX SSL certificate problem certificate ha
  • Java中的直接赋值、浅拷贝和深拷贝

    将一个对象的引用复制给另外一个对象 一共有三种方式 第一种方式是直接赋值 第二种方式是浅拷贝 第三种是深拷贝 所以大家知道了哈 这三种概念实际上都是为了拷贝对象啊 直接赋值 好 下面我们先看第一种方式 直接赋值 在Java中 A a1 a2
  • 华为OD机试 - 数组分组(C++ & Java & JS & Python)

    描述 输入int型数组 询问该数组能否分成两组 使得两组中各元素加起来的和相等 并且 所有5的倍数必须在其中一个组中 所有3的倍数在另一个组中 不包括5的倍数 不是5的倍数也不是3的倍数能放在任意一组 可以将数组分为空数组 能满足以上条件
  • pandas.DataFrame.notnull返回非空值

    gt gt gt import pandas as pd gt gt gt df pd read csv test csv gt gt gt print df name id 0 ZhangSan 1 0 1 LiSi 2 0 2 Wang
  • 关于UML时序图与类图的学习(程序开发)

    时序图 时序图可以帮助我们更加清晰地看到一个系统之中各个对象的运行情况 有助于我们 梳理业务代码的结构 梳理一些框架的源码理清启动流程以及各个层次之间的关系 在绘制时序图的时候 我们需要接触七种元素 角色 Actor 对象 Object 生
  • 七. OpenFeign 服务接口调用

    目录 一 基础介绍 二 使用 OpenFeign 调用服务接口的实现步骤 服务提供方 服务消费方 OpenFeign 调用服务超时问题 OpenFeign 日志打印功能 服务消费方 yml 中配置 Feign 调用超时与 Feign 日志
  • 智源论坛:人工智能与国际知识产权

    人工智能作为新一轮科技革命的核心技术 已经成为推动科技创新和经济发展的关键因素 在政策和市场的双重推动下 中国人工智能产业已进入高速发展阶段 技术红利快速释放 创新成果不断涌现 应用领域日益拓展 其中 厘清人工智能与知识产权保护的关系 是确
  • 即时AI设计领跑新视界

    Part1前言 随着人工智能技术的不断发展 越来越多的设计师开始关注AIGC Artificial Intelligence Generated Content 并开始思考AIGC对设计师的影响以及如何运用AIGC即时为设计服务 作为全球首
  • 最新RemObjects,您值得拥有

    最近想学习一下分布式等技术 在网上找了一些资料 为了方便俺记了下来 以下转载自 http blog csdn net chinaeband archive 2009 06 19 4282506 aspx http blog csdn net
  • 中南林注册教育邮箱加获取JetBrains个人许可证,续订许可证

    文章目录 1 注册中南林教育邮箱 1 1 注册 1 2 登录 1 3 speech balloon 有话说 2 注册JetBrains个人账号 2 1 进入登录 注册 2 2 查看邮箱信息 2 3 填写基本信息并提交 2 4 注册成功 3
  • 软件测试的艺术

    软件测试 软件测试 是一个过程或一系列过程 用来确认计算机代码完成了其应该完成的功能不执行其不该有的操作 软件应当是可预测且稳定的 不会给用户带来意外惊奇 更准确的说 测试是为发现错误而执行程序的过程 软件测试的重要原则 编号 原则 0 软
  • Java项目---图片服务器

    图片服务器 gt 服务器 图床 核心功能 上传图片 展示图片等 比如 编写博客时我们会插入图片 本质上是往文章中放了一个链接 URL 这个URL资源在另外一个服务器上 核心知识点 1 简单的Web服务器设计开发能力 Servlet Web服
  • Linux编程(获取系统时间)

    include
  • 事务中间件 CICS 原理及应用开发

    https www ibm com developerworks mydeveloperworks blogs cicschina entry cics transaction gateway69 lang en 事务中间件 CICS 原理