ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:391.02KB ,
资源ID:7953244      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7953244.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Web service 与 CICS 事务处理应用的集成.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Web service 与 CICS 事务处理应用的集成.docx

1、Web service 与 CICS 事务处理应用的集成Web service 与 CICS 事务处理应用的集成2008 年 12 月 11 日CICS(Customer Information Control System),即客户信息控制系统,是为 IBM 和非 IBM 平台上一系列应用提供联机事务处理和事务管理的产品,其主要功能是为商业应用提供一个事务处理环境。该产品拥有近四十年的悠久历史,被广泛应用于银行金融 业。但随着当前信息技术的迅猛发展,很多经典的事务处理应用面临着如何被扩展和重用,以求与其他平台应用相集成的问题。CICS 作为 IBM 的重要产品,借鉴了 SOA 的主要思想,采

2、用 Web service 封装已有的应用,实现了 CICS 与其他平台应用的结合与互操作。本文通过一个实际的例子,将一个已有的 CICS 应用程序封装成 Web service 的请求者(requester)请求另一个 Web service,同时又作为服务提供者(provider)接受其它应用的访问。读者不仅能从本文详细了解到如何在 z/OS 上构建 CICS Web service 的详细步骤,同时能够把握 CICS Web service 如何与部署在其他平台上的 Web service 进行互操作,以及与 IBM WSRR(WebSphere Service Registry and

3、 Repository) 的结合使用。 概述 主机 (Mainframe) 上的 CICS 服务由于其历史的悠久,存在着很多对于事务处理的经典应用。如何将这些应用重用,并与其他平台的服务进行交互是本文的主要内容。本文模拟了一个非常普遍的应用场景,通过实例介绍 CICS Web service 的封装和具体应用。该实例的总体框架如图 1 所示,主要包括三部分。 1. 实时汇率服务 (Exchange Rate Service, 下文简称为 RateService),是部署在 Windows 操作系统 Websphere Application Server(WAS) 上的一个 Web servi

4、ce,提供汇率值的实时查询服务,由 Java 语言实现。为了使例子简单易懂,这里仅仅提供了人民币对美元的汇率和人民币对欧元的汇率。 2. 转账服务 (TransferService),一个存在于主机 z/OS 环境中的 CICS 事务处理应用程序,它是由 C 语言编写,用于银行帐户不同币种的转账处理。例如某银行客户张三,上月去美国透支了信用卡中 1000 美元用于消费,现在回到中国必须用人民币转账到自己的信用卡美元账户以偿还透支额度。转账过程中必须知道人民币对美元的汇率,因此需要封装成为 Web service 的客户端 (requester) 访问 RateService 提供的实时汇率服务

5、。同时,为了使转账服务能够提供给异构平台上各种语言的客户端调用,还需要将其封装成 Web service 的提供者 (provider)。 3. 网上银行 (Online Trading Platform),模拟的网上交易平台。客户端调用转账服务 (TransferService) 完成客户用人民币偿还信用卡美元帐户等类似转账交易。作者在本文中给出了一个 Struts 框架实现的 Web 应用程序来模拟这一交易平台。 图 1. 实例总体框架 第一步:汇率服务的创建 1. 开发环境 开发平台:Windows 操作系统,IBM Rational Application Developer 7.0.

6、0( 内置 Websphere Application Server 6.1) 开发语言:Java 2.开发步骤 新建一个动态 web 项目。在 IBM RAD7 开发环境中,选择 File-New-Project, 选择动态 web 项目,命名为 exchange,保留其它选项默认值。 编写要暴露成 Web service 的 Java bean。右键点击 Java Resources:src 目录,选择 New-Class,填写包名 rate、类名 Rate。Java bean 源代码如清单 1 所示,提供了人民币对美元和人民币对欧元的汇率。 清单 1. Java Bean 源代码 pac

7、kage rate;public class Rate double RMBtoDollar = 0.1426; double RMBtoEuro = 0.09026; String errorMsg = Input is not correct; public double getRate(String source, String target) if (source.equalsIgnoreCase(RMB) if (target.equalsIgnoreCase(Dollar) return RMBtoDollar; if (target.equalsIgnoreCase(Euro)

8、return RMBtoEuro; / any input error, return 0 return 0; 将 Java Bean 封装成 Web service。右键点击项目名称 exchange, 选择 New-Other-Web Services-Web Service。设置 Web service 的构建方式,选择 Bottom Up Java Bean Web Service自底向上(由 Java Bean 生成 WSDL 文件)的构建方式。同时指定 Rate 类作为该 Java Bean,如图 2 所示。点击 Finish,一个 Web service 便构建成功。在 .exc

9、hangeWebContentWEB-INFwsdl 目录下可以找到刚刚生成的 Rate.wsdl 文件。wsdl 文件描述了该服务的相关信息,该文件可从附件中下载查看。 图 2. 设置 Web service 构建方式 部署 Web service 到应用服务器。启动应用服务器(这里是 Websphere Application Server 6.1),加载该动态项目的 EAR 包 exchangeEAR。 3.测试 Web service 利用内嵌在 Rational Application Developer 开发环境中的 Web service 客户端工具 (Web Services

10、Explorer) 测试 RateService 是否工作正常。 首先在 .exchangeWebContentWEB-INFwsdl 目录下找到 Rate.wsdl 文件,右键单击该文件选择 Web Services-Test with Web Services Explorer,打开客户端测试窗口。 在 Web Services Explorer 窗口左侧找到 Rate.wsdl 文件,选中该 Web Service 提供的操作(Operation)getRate,窗口右侧出现该服务的详细描述并提供输入界面并显示输出结果。在 source 项中输入 RMB,在 target 项中输入 DO

11、LLAR,得到人民币对美元的汇率 0.1426。这说明 RateService 运行正常,如图 3 所示。图 3. 使用 Web Services Explorer 测试 Web service 4.发布 RateService 到 WSRR(WebSphere Service Registry and Repository)。 最后需要将描述 RateService 的 wsdl 文件 (Rate.wsdl) 上传到 WSRR-WSDL 管理中心,由 WSRR 统一管理,方便用户查找该服务,如图 4 所示。CICS 在 3.2 版本之后于 2008 年上半年发布了支持 WSRR 的工具包,将

12、在下文详细介绍。 图 4. WSRR 发布 RateService 第二步:转账服务的实现 1. 开发环境 开发平台:CICS 3.2 on z/OS, DB2 v8 on z/OS 开发语言:C 语言 2.CICS Web service 相关概念。CICS 对 Web service 的支持主要通过以下几方面来实现: CICS 支持 Web service 的相关资源,主要有 PIPELINE、URIMAP、WEBSERVICE、TCPIPSERVICE 等,这些资源能够定义 WebService 的处理过程。 Web Services Assistant 工具,最新的 CICS 3.2

13、工具包主要由两个程序组成:DFHWS2LS 和 DFHLS2WS。它们在 3.1 的版本上有所增强,提供了更丰富的支持,可支持的语言包括:COBOL、PL/I、C、C+。用户可以通过使用 Web Services Assistant 来快速方便地实现 WebService,也可以通过自己编程完全地控制 CICS 程序和 WebService 接口之间的数据交互。 DFHWS2LS: 帮助用户把 WSDL 文件中的数据定义映射为 CICS 程序所使用编程语言的数据结构。 DFHLS2WS: 帮助用户把高级语言编写的 CICS 程序所使用的数据结构转换成 WSDL 定义。 支持 WebServic

14、e 的 CICS API,例如 INQUIRE WEBSERVICE, INVOKE WEBSERVICE 等。 此外 CICS 在推出 3.2 版之后又发布了一个独立的工具包 CICS SupportPac for WSRR,支持 CICS Web service 与 WSRR 的结合使用。这个工具包主要包含两个程序:DFHWS2SR 和 DFHSR2WS。 DFHWS2SR: 帮助用户来把已有的 wsdl 文件从主机 USS 系统中发布到 WSRR。 DFHSR2WS: 用来帮助用户把发布在 WSRR 上的 wsdl 文件下载到主机 USS 系统中。 3. 背景分析 转账服务 (Trans

15、ferService, 下文中两者通用 ) 通常是部署在 CICS 上的一个应用程序,它负责完成各种货币之间的兑换和帐户的转账交易,这是 CICS 应用程序在银行业务中最常见的一种应用。在没有引入 Web service 以前,转账服务必须将有关汇率的处理包含在程序逻辑之内,增加了程序的耦合性。最好的情况也只能封装成 CICS 区域 (region) 上的不同应用程序,通过 CICS 提供的程序之间或区域之间通信的 API 来互相调用。这样一来汇率服务就很难与其他平台和语言编写的程序实现互操作。而 Web service 的引入有效的解决了上述问题,充分实现了服务的可重用性和互操作性。 转账服

16、务的详细处理逻辑:转账服务首先作为 Web service 的服务端 (provider),等待客户端的参数输入。输入包括四个参数:用户名、转账金额、源账户、目标账户。例如:Zhanglin, 100, rmb, dollar 四个参数表示从 zhanglin 的人民币账户中转出 100 元人民币到他的美元账户。转账过程中,需要用到人民币与美元之间的汇率。此时,转账服务转变角色,作为 Web service 的客户端 (requester) 调用 RateService 提供的汇率服务。 4. 开发步骤 下面通过 Web service 封装转账服务的详细步骤,向读者展示 CICS Web s

17、ervice 的应用,并结合实际应用阐述以上有关 CICS Web service 相关的理论和概念。 转账服务作为 RateService 的客户端 (requester),需要知道 RateService 相关描述,所以必须首先通过 DFHSR2WS 从 WSRR 上下载描述 RateService 的 Rate.wsdl 文件。 在主机上通过提交一个 JCL,指定相关参数,便可以调用 DFHSR2WS 程序,将 Rate.wsdl 文件下载到 USS 系统文件夹下。JCL 源码如清单 2 所示: 清单 2. 调用 DFHSR2WS 下载 Rate.wsdl 文件的 JCL 源代码 * T

18、op of Data */DSR2WSRT JOB MSGCLASS=H,CLASS=A,NOTIFY=&SYSUID,REGION=0M /* /* * /* DESC : retrieve the wsdl file from WSRR * /* * /* /WSDLREAD JCLLIB ORDER=LIUGUAN.CA1N.JCL /EXEC EXEC DFHSR2WS, / JAVADIR=java142s/J1.4, / WORKDIR=/u/liuguan/install, / TMPDIR=/tmp, / TMPFILE=SR2WS /INPUT.SYSUT1 DD * HOS

19、TPORT=:9080 LOCATION=/u/liuguan/userdemo/wsdl/ LOGFILE=/u/liuguan/userdemo/wsdl/wsdlrate.log NAME=Rate.wsdl */ * Bottom of Data * Dataset LIUGUAN.CA1N.JCL 指定了执行 DFHSR2WS 程序所需要的相关资源 HOSTPORT 指定 WSRR 部署的服务器和端口。 LOCATION 指定 wsdl 文件存放在 USS 下的具体位置。 LOGFILE 指定日志文件,记录程序执行成功或失败的相关信息。 NAME 指明在 WSRR 上要下载的 wsd

20、l 文件名。 上述参数是执行 DFHSR2WS 所必须的,其他参数及有关于 DFHSR2WS 更详细的介绍可以在工具包的帮助文档中查到。 Rate.wsdl 文件成功下载后,即可以通过 CICS 3.2 工具包中的 DFHWS2LS 程序,将 wsdl 文件中描述的输入输出转换成具体语言的数据结构,提供给转账服务程序使用。 调用 DFHWS2LS 仍然通过提交一个 JCL,成功执行后会有两个 member 产生,一个描述服务的输入,另一个描述输出。JCL 的源码如清单 3 所示: 清单 3. 调用 DFHWS2LS 实现 XML 到 data 转换的 JCL 源代码 * Top of Data

21、 * /TWS2LS JOB 616,LGJ,MSGLEVEL=(1,1),REGION=0M,NOTIFY=&SYSUID /*JUSTIN /*THIS JCL CONVERT WSDL(GET FROM PROVIDER) TO LANGUAGE STRUCTURE /* AND WSBIND FILE /*THIS IS A SAMPLE OF WSCELL /MYPROC JCLLIB ORDER=CTS320.CICS650.SDFHINST /JAVAPROG EXEC DFHWS2LS,PATHPREF=,USSDIR=cerbsf /STEPLIB DD DSN=CTS320

22、.CICS650.SDFHINST,DISP=SHR / DD DSN=CNTESTD.CICS.C.SRC,DISP=SHR /INPUT.SYSUT1 DD * LOGFILE=/u/liuguan/userdemo/ws2ls/rate.log PDSLIB=/LIUGUAN.ACICS.WSAT.SOURCE REQMEM=RATEO RESPMEM=RATEI LANG=C STRUCTURE=(ratestq,ratestr) WSBIND=/u/liuguan/userdemo/wsclient/wsbind/rateask.wsbind WSDL=/u/liuguan/user

23、demo/wsdl/Rate.wsdl /* / * Bottom of Data * Dataset CTS320.CICS650.SDFHINST 指定了执行 DFHWS2LS 程序所需要的相关资源。 PDSLIB 指定输入输出两个 member 产生的位置。 REQMEM 指定转换输入的数据结构。 RESPMEM 指定转换输出的数据结构。 LANG 指定要转换为哪种语言的数据结构。 WSBIND 指定转账服务在作为 Web service 客户端所需要的相关配置信息,它将会在 PIPELINE 安装时用到。通过 wsbind 文件,真正的语言结构 (Language Structure)

24、 和 SOAP 包中 xml 对于数据结构的定义才能相互对应并转换。 WSDL 则指定要生成 Language Structure 的 wsdl 文件。 JCL 执行成功后,会在 Dataset LIUGUAN.ACICS.WSAT.SOURCE 生成两个 member,RATEO01 和 RATEI01(末尾加上 01 是 DFHWS2LS 的命名规则)。 RATEO01 中存储的是 TransferService 作为 RateService 客户端请求 RateService 时发出的数据结构,源码如清单 4 所示(主机中因为编码的原因 ?( 代表 ,而 ?) 代表 , 下同): 清单

25、4. RATEO01 源代码 struct ratestq01 struct char source?(255?); char target?(255?); getRate; ; RATEI01 则存储的是经过 RateService 处理请求之后返回给 TransferService 的数据结构,源码如下: 清单 5. RATEI01 源代码 struct ratestr01 struct char getRateReturn?(32?); getRateResponse; ; 在产生了上述的 wsbind 文件和相应的输入输出数据结构之后,便可以开始 TransferService 代码的

26、编写。TransferService 作为 Web service 的服务端 (provider) 也必须定义输入和输出数据结构两个 member 文件,分别为 TRANSI 和 TRANSO。TRANSI 中的输入结构必须命名为 CMDINPUT,TRANSO 中的输出结构则必须命名为 OUTPUT。根据上文提到的逻辑,输入结构 (CMDINPUT) 中应该有四个值 : 用户名,转账金额,源账户和目标账户,如清单 6 所示。输出结构 (OUTPUT) 中定义账户转账之前和之后的金额两个值,如清单 7 所示。 清单 6. TRANSI 中 CMDINPUT 结构体的定义: struct CMD

27、INPUT char user?(32?); char sum?(255?); char source?(255?); char target?(255?); ;清单 7. TRANSO 中 OUTPUT 结构体的定义: struct OUTPUT char before?(255?); char after?(255?); ;完成上述准备工作,焦点转移到 TransferService 程序的逻辑编写,该程序命名为 TRANSFER。TRANSFER 程序中几段核心的源码介绍如下。 清单 8. CICS DB2 应用接口的声明: EXEC SQL BEGIN DECLARE SECTION;

28、char dbuser?(11?);double money = 0;double rmb_account = 0;double target_account = 0;EXEC SQL DECLARE LIUGUAN.USERDEMO TABLE( USER_NAME CHAR (10) NOT NULL, RMB_ACCOUNT DOUBLE, DOLLAR_ACCOUNT DOUBLE, POUND_ACCOUNT DOUBLE, EURO_ACCOUNT DOUBLE, JPY_ACCOUNT DOUBLE, HKD_ACCOUNT DOUBLE, TWD_ACCOUNT DOUBLE,

29、 KRW_ACCOUNT DOUBLE );EXEC SQL END DECLARE SECTION;清单 8 中,EXEC SQL BEGIN DECLARE SECTION 和 EXEC SQL END DECLARE SECTION 之间声明了程序将会连接的数据库表和相关变量,这是 CICS 操作 DB2 的用法,必须在 main 函数前首先声明。从这个 DECLARE SECTION 中可以看到程序将会操作数据库名为 LIUGUAN 下的 USERDEMO 表。该表的结构如 SECTION 所示,已在主机 DB2 中建好。完成相关的声明,在函数内部才能使用 CICS 操作 DB2 的 API。清单 9. CICS Web service API 的应用: /* put data in the container and send the request to get rate value EXEC CICS PUT CONTAINER(name_container) CHANNEL(channel_name) FLENGTH(sizeof(rateout.getRate) FROM(rateout.getRate); /* invoke the

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1