点击这里下载 - 同济大学软件学院

Download Report

Transcript 点击这里下载 - 同济大学软件学院

大型主机应用上的开放系统和中间件
2011年度教育部-IBM精品课程
同济大学软件学院
唐剑锋
[email protected]
第11章 应用CICS Web Service实现CICS样例应用程序
Web服务封装的案例分析
11.1 案例背景介绍





在开始本练习之前,我们必须特别指出的是:本样例应用程序基于的
CICS版本必须是3.1或以上,否则将得不到预想的结果。另外指出的是,
本章练习基于的z/OS操作系统版本是1.8,这跟第9章的练习基于的
z/OS操作系统的版本不同,第9章的练习基于的操作系统版本是z/OS
1.5。
该实验演示如何设立CICS Web服务环境,并让初学者学习CICS提供的
Web服务功能,以及为什么CICS包装了Web服务。
我们都知道,任何时间、任何地点有如此多的人从因特网上得到各种
有用的信息,于是浏览器变得越来越普及和漂亮。传统的3270终端便
显得不够友好。
然而,如此多的交易以3270终端的方式运行,以至于我们无法永久放
弃它。
CICS作为最重要的交易中间件决定提供将功能包装成Web服务的特征。
幸运的是,程序员无需更改在CICS Region里安装的任何代码,只需要
将Web服务环境建立起来,就可以完成将CICS程序功能包装成Web服务
发布的任务。

CICS作为Web服务提供者的内部示意图见下图11-1所示:
图11-1 CICS作为Web服务提供者的内部示意图



如上图所示,一个Pipeline中的消息处理程序(通常是一个CICS提供
的SOAP消息处理程序)去除了从进入请求来的SOAP信封,并将SOAP
Body部分传递给数据映射功能。
使用Web服务绑定文件来将SOAP Body的内容匹配到应用程序的数据结
构。
如果SOAP消息的确认功能是激活的,那么SOAP Body会由Web服务描述
来得到确认。如果有离开的响应,过程刚好相反。


最重要的消息转换机制是COMMAREA。COMMAREA使得浏览器和CICS应用
程序各自运行并相互通讯。
在下面的实验中,我们通过使用CICS Web服务助理工具将一个现有的
CICS COBOL样例应用程序暴露为Web服务,产生必要的组件,并定义新
的CICS资源,最后在RAD(Rational Application Developer)和WAS
(WebSphere Application Server)中测试其基本功能。





下面对样例应用程序进行介绍。
CICS目录样例应用程序是一个设计用来展示将CICS应用程序连接到外
部客户端和服务器的最佳实践的COBOL应用程序。该样例由一个简单的
销售目录和订单处理应用程序组成,终端用户可以完成如下功能:
1.列出一个目录里的条目
2.对目录里的单个条目进行查询
3.从目录里订购条目
目录由一个VSAM数据集来实现。
基础应用程序有一个3270的用户接口,但是模块化的结构有着在组件
间良好定义的接口,这使其可以增加更多的组件。
特别的,应用程序有Web服务的支持,它被设计用来展示如何将一个现
有应用扩展进Web服务环境。

(不含Web端的)样例应用程序的体系结构图如下图11-2所示:

基础应用程序的组件是:
1.一个BMS显示管理程序(DFH0XGUI),该程序支持3270终端或仿真器,
并且与主目录管理程序交互。
2. 一个目录管理程序(DFH0XCMN),该程序是样例程序的核心,和多
个后端组件交互。
3.后端组件,包括:
– 一个数据处理程序,该程序提供了目录管理程序和数据存储之间的接口。
基础应用程序提供了这个程序的两个版本。它们是在一个VSAM数据集中存
储数据的VSAM数据处理程序(DFH0XVDS),和一个不存储数据,而仅仅将
有效的响应返回给调用者的哑数据处理程序(DFH0XSDS)。配置选项使得
我们可以在这两个程序间进行选择。
– 一个分发管理程序,该程序提供了一个将一份订单分发给一个客户的接口。
同样的,配置选项使得我们可以在这个程序的两个版本间进行选择。
DFHX0WOD是一个调用远端订单分发端点的Web服务请求者,而DFHX0SOD是一
个仅仅将有效的响应返回给调用者的哑程序。有两个相似的订单分发端点:
DFH0XODE是一个CICS服务提供者程序;ExampleAppDispatchOrder.ear是一
个可以被部署在WebSphere Application Server或相似环境的企业档案文
件。
– 一个哑存货管理程序(DFH0XSSM),该程序向其调用者返回有效的响应,
但并不采取其他行动。

(含Web端的)样例应用程序体系结构图11-3如下所示:

在这个配置中,可以通过两个不同的客户端访问应用程序:
– 一个连接到WebSphere Application Server 的Web浏览器客户端,
ExampleAppClient.ear在WAS上被部署。
– CICS Web服务客户端DFH0XECC。该客户端使用同样的BMS显示管理
程序(DFH0XGUI)作为基础应用程序。

另一个(含Web端的)样例应用程序体系结构图如下图11-4所示:
在这个配置中,Web浏览器客
户端连接到WebSphere
Application Server,
ExampleAppWrapper.ear在
WAS上被部署。在CICS中,三
个包装应用程序(查询目录,
查询单个条目和下订单的功
能)被作为服务提供者应用
程序部署。它们反过来连接
到基础应用程序。
11.2 实现主机端样例应用程序
1.创建和定义VSAM数据集。首先定位JCL来创建VSAM数据集。
在本章基于的大型机系统环境下,在CICS安装完成后,JCL放在
CICSTS.V3R1.CICS.SDFHINST库中,其中成员DFH$ECNF包含了产生配置
数据集的JCL,成员DFH$ECAT包含了产生目录数据集的JCL。
2.更改JCL和访问方法服务命令。
(1)提供一个有效的JOB卡片。
(2)提供一个在访问方法服务命令中合适的数据集名字的高级限定符。
在本章的样例中,JCL使用的高级限定符是TE05。
3.以下JCL创建了目录数据集并将(部分)数据装入数据集中:
//TE05A JOB (ASYSTEM,AUSER),'ME',CLASS=A,NOTIFY=TE05
//DEFKSDS EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=A
//AMSDUMP DD SYSOUT=A
//SYSIN DD *
DELETE TE05.EXMPLAPP.ECAT05 PURGE CLUSTER
SET MAXCC=0
DEFINE CLUSTER (NAME(TE05.EXMPLAPP.ECAT05)TRK(1 1) KEYS(4 0) RECORDSIZE(80,80) SHAREOPTIONS(2 3) INDEXED ) DATA (NAME(TE05.EXMPLAPP.ECAT05.DATA) ) INDEX (NAME(TE05.EXMPLAPP.ECAT05.INDEX) )
//*
//CPYKSDS EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=A
//AMSDUMP DD SYSOUT=A
//INFILE
DD *
0010Ball Pens Black 24pk
010002.900135000
0020Ball Pens Blue 24pk
010002.900006050
0030Ball Pens Red 24pk
010002.900106000
//OUTFILE DD DSN=TE05.EXMPLAPP.ECAT05,DISP=SHR
//SYSIN DD *
REPRO INFILE(INFILE) OUTFILE(OUTFILE)
//
以上JCL从CICSTS.V3R1.CICS.SDFHINST(DFH$ECAT)中拷贝而来,对源数据集稍作
改动,其中TE05是样例程序中的UserID,ECAT05中的05是UserID的后两位。
4.以下JCL创建了配置数据集并将数据装入数据集中:
//TE05A JOB (ASYSTEM,AUSER),'ME',CLASS=A,NOTIFY=TE05
//DEFKSDS EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=A
//AMSDUMP DD SYSOUT=A
//SYSIN DD *
DELETE TE05.EXMPLAPP.ECONF05 PURGE CLUSTER
SET MAXCC=0
DEFINE CLUSTER (NAME(TE05.EXMPLAPP.ECONF05)TRK(1 1) KEYS(9 0) RECORDSIZE(350,350) SHAREOPTIONS(2 3) INDEXED ) DATA (NAME(TE05.EXMPLAPP.ECONF05.DATA) ) INDEX (NAME(TE05.EXMPLAPP.ECONF05.INDEX) )
//*
//CPYKSDS EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=A
//AMSDUMP DD SYSOUT=A
//INFILE
DD *
EXMP-CONF VSAM N DFH0XCMN DFH0XSDS DFH0XVDS DFH0XSOD DFH0XWOD DFH0XSSM
OUTBNDURL http://myserver:80/exampleApp/dispatchOrder
VSAM-NAME EXMPCAT
WS-SERVER myserver:99999
//OUTFILE DD DSN=TE05.EXMPLAPP.ECONF05,DISP=SHR
//SYSIN DD *
REPRO INFILE(INFILE) OUTFILE(OUTFILE)
//
以上JCL从CICSTS.V3R1.CICS.SDFHINST(DFH$ECNF)中拷贝而来,对源数据集稍作改
动,其中TE05是样例程序中的UserID,ECONF05中的05是UserID的后两位。
5.分别提交前面两个JCL创建VSAM数据集并将数据装入数据集中,
MAXCC<=4表示提交成功。
自此,VSAM数据集创建起来并被导入数据。
6.使用CEDA交易为目录数据集创建一个FILE定义:
在CICS Region里输入以下命令:
CEDA DEF FILE(EXMPCAT) G(CICSWS05)。
其中组CICSWS05事先创建起来,CICSWS05的05是 UserID的后两位。
运行以上命令后,还需要进到EXMPCAT中进行如下设置(部分),粗体的
参数为必填参数:
此处需要将DSNAme设置成刚
刚建好的VSAM数据集:
TE05.EXMPLAPP.ECAT05。还
需要将OPERATIONS 中的Add,
Browse,DELete,READ和
UPDATE选项都设置成Yes,以
便使程序对VSAM数据集有读
写权限。
7.使用CEDA交易为配置文件创建一个FILE定义:
在CICS Region里输入以下命令:
CEDA DEF FILE(EXMPCONF) G(CICSWS05)。
其中CICSWS05的05是 UserID的后两位。
运行以上命令后,还需要进到EXMPCONF中进行如下设置(部分),粗体
的参数为必填参数:
上述需要将DSNAme设置成
刚刚建好的VSAM数据集:
TE05.EXMPLAPP.ECONF05。
还需要将OPERATIONS 中
的Add,Browse,DELete,
READ和UPDATE选项都设置
成Yes,以便使程序对
VSAM数据集有读写权限。
8.使用CEDA交易来安装刚刚定义好的两个FILE资源。
在CICS Region里运行以下命令:
CEDA Install G(CICSWS05)
如果安装出现故障,在CICS Region里运行以下命令:
CEMT I FILE(EXMPCAT) 和CEMT I FILE(EXMPCONF)
CICS Region将出现如下反馈:
在Clo处输入Ope,如果前面的设置一切正确,CICS Region将反馈
NORMAL,表示该VSAM数据集已经处于打开状态。
自此,在CICS Region里定义和安装两个VSAM数据集的工作完成。



9.下面的工作是定义3270接口。我们提供了3270用户接口来运行并定
制化样例应用。
用户接口包括三个映像集:DFH0XS1,DFH0XS2和DFH0XS3。
用户接口还包括两个交易:EGUI和ECFG,其中EGUI对应的程序是
DFH0XGUI,ECFG 对应的程序是DFH0XCFG。
另外还有其他7个程序,它们分别是:DFH0XCMN,DFH0XODE,DFH0XSDS,
DFH0XSOD,DFH0XSSM,DFH0XVDS和DFH0XWOD,这样一共有9个程序。
3个映像集和9个程序的简要介绍见表11-1所示:
各程序的源代码均在
CICSTS.V3R1.CICS.SDFHSAMP
中,在CICS安装好后就已经存
在,不需要用户自己编写。由
于各个程序的代码很长,限于
篇幅,在此省略。另外对源代
码进行CICS编译,COBOL编译、
链接的JCL由于同第6章6.2中
COBOL+CICS样例程序开发中
CICS翻译、COBOL编译、链接
COBOL+CICS样例程序的JCL基
本相同,故在此略。



下面使用CEDA交易来创建PROGRAM和TRANSACTION。
在CICS Region里运行如下命令:
CEDA DEF PROG(DFH0XGUI) G(CICSWS05)
CEDA DEF PROG(DFH0XCFG) G(CICSWS05)
CEDA DEF TRANS(EGUI) G(CICSWS05) PROG(DFH0XGUI)
CEDA DEF TRANS(ECFG) G(CICSWS05) PROG(DFH0XCFG)
创建其他7个PROGRAM命令如下:
CEDA DEF PROG(DFH0XCMN) G(CICSWS05)
CEDA DEF PROG(DFH0XODE) G(CICSWS05)
CEDA DEF PROG(DFH0XSDS) G(CICSWS05)
CEDA DEF PROG(DFH0XSOD) G(CICSWS05)
CEDA DEF PROG(DFH0XSSM) G(CICSWS05)
CEDA DEF PROG(DFH0XVDS) G(CICSWS05)
CEDA DEF PROG(DFH0XWOD) G(CICSWS05)





10.完成安装过程
为了完成安装过程,安装包含资源定义的RDO组。在CICS终端输入如下
命令:CEDA I G(CICSWS05)。应用程序现在准备好可以使用了。
注:如果CICS重启,我们需要重新安装所有FILE,MAPSET,PROGRAM,
TRANSACTION和其他资源,这显然不太方便。
为了节省时间,我们可以在CICS Region里运行如下命令将组CICSWS05
加入到我们选择的一个LIST CICSWS中:CEDA ADD G (CICSWS05)
L(CICSWS)。
然后更改CICS启动JCL文件(在我们的系统里,该文件为:
CENTER.CICS(DFH$AOR1)),将原先的GRPLIST=(LISTAOR1,EYU310L0),
变成:GRPLIST=(LISTAOR1,EYU310L0,CICSWS),。其他地方都不需要变
动,这样每次重启CICS后,CICS会自动安装CICSWS所在的组CICSWS05
里的所有资源。
自此,我们完成了定义和安装样例应用程序的工作。


11.在3270 屏幕中运行样例程序。可以使用BMS接口来调用基本应用程
序。
(1)从CICS终端输入交易EGUI,如果一切正常,样例应用程序将显示
如下菜单:
菜单上的选项使得我们可以:列出目录里面的条目,订购一个条目,
或者退出应用程序。

(2)输入1并回车以选择List Items选项。应用程序显示目录里的条
目列表(部分):

(3)在Order列输入/,然后回车来订购一个条目。应用程序将显示订
购条目的详细信息。在Order Quantity,User Name和Charge Dept中
分别输入信息来订购该条目(粗体为输入的信息):

(4)其中Order Quantity域中输入想要订购的条目数量;User Name
域中输入1-8个字符串,样例应用程序并不检查在这里输入的值;
Charge Dept域中输入1-8个字符串,样例应用程序也不检查在这里输
入的值。
(5)按回车提交订购申请并返回到主菜单。
(6)选择Exit选项终止应用程序。
自此,样例应用程序已经运行成功。



11.3 建立并安装CICS Web Service支持环境




下面将建立并安装Web支持环境。
针对样例应用程序的Web服务支持需要层次型文件系统(HFS)中的一
个shelf目录和一个pickup目录。
Shelf目录用来存放和WEBSERVICE资源相关的Web服务绑定文件。每一
个WEBSERVICE资源再反过来和PIPELINE相关联。Shelf目录由PIPELINE
资源来管理,用户不应直接修改其内容。多个PIPELINE可以使用相同
的shelf目录,CICS为每一个PIPELINE在shelf目录下面保证一个唯一
的目录结构。
Pickup目录用来存放和PIPELINE资源相关的Web服务绑定文件。当一个
PIPELINE被安装时,或者作为到PERFORM PIPELINE SCAN命令的响应,
绑定文件里的信息用来动态创建和PIPELINE 相关的WEBSERVICE和
URIMAP的定义。




缺省情况下,使用/var/cicsts作为shelf目录。EXPIPE01和EXPIPE02的
样本PIPELINE定义从CICS提供的资源定义组DFH$EXWS拷贝而来,它们作
为pickup目录分别是:
/usr/lpp/cicsts/cicsts31/samples/webservices/wsbind/provider/和
/usr/lpp/cicsts/cicsts31/samples/webservices/wsbind/requester/。
一个pipeline在安装时会在一个XML pipeline配置文件中读取。系统提
供如下的缺省目录和配置文件:
对EXPIPE01:
/usr/lpp/cicsts/cicsts31/samples/pipelines/basicsoap11proider.x
ml
对EXPIPE02:
/usr/lpp/cicsts/cicsts31/samples/pipelines/basicsoap11requester
.xml
注意:为了将各目录与TSO UserID TE05相对应,我们在下文中将修改上
述shelf目录、pickup目录和PIPELINE设置。
用来处理Web服务请求的pipeline的配置信息指定在XML文档中,称为
pipeline配置文件。该文件的名字在PIPELINE定义的CONFIGFILE属性中
指定。

下面详细论述建立并安装Web支持环境的各个步骤。
1.对查询目录的程序,我们用DFHLS2WS 生成相应的WSBIND文件、WSDL
文件及LOG文件,具体步骤如下:
(1)CICS安装好以后,称为DFH0XCP3的COMMAREA文件就自动安装在
CICSTS.V3R1.CICS.SDFHSAMP中,将DFH0XCP3拷贝到事先建好的自己的
数据集TE05.EXMPLAPP.CPY中。步骤略。
(2)在OMVS环境下新建如下目录结构,这些目录在后续的练习步骤中
都要用到(创建目录结构的方法略):
/u/te05/wsapp/
/u/te05/wsapp/wsbind/
/u/te05/wsapp/wsdl/
/u/te05/wsapp/wsdir/
/u/te05/wsapp/shelf/
/u/te05/pipeline/
/u/te05/logs/

(3)运行如下JCL产生重要的文件:

DFHLS2WS:该实用工具程序将高级语言数据结构作为输入,从而产生
一个包含消息描述的Web服务描述文件,和在那些从数据结构来的消息
中使用的数据类型。该实用工具产生一个CICS运行时使用的Web服务绑
定文件来在应用程序的数据结构和SOAP消息之间做映射。


DFHLS2WS是一个可供其它程序调用的Procedure,从上述JCL中我们可以看出该
Procedure来自CICSTS.V3R1.CICS.SDFHINST,在CICS安装好以后就自动创建起来。
DFHLS2WS的代码在此省略。
该JCL中的主要参数的解释如下:
PDSLIB=//TE05.EXMPLAPP.CPY
--包含REQMEM和RESPMEM的PDS
REQMEM=DFH0XCP3
--请求方的COMMAREA数据结构
RESPMEM=DFH0XCP3
--响应方的COMMAREA数据结构
LANG=COBOL
--编程语言
PGMNAME=DFH0XCMN
--使用COMMAREA的程序
URI=exampleApp/inquireCatalog
--用来调用Web服务的URI
PGMINT=COMMAREA
--在客户端和服务端传递消息的方式
WSBIND=/u/te05/wsapp/wsbind/inquireCatalog.wsbind
--由DFHLS2WS生成的wsbind文件
WSDL=/u/te05/wsapp/wsdl/inquireCatalog.wsdl
--由DFHLS2WS生成的wsdl文件
LOGFILE=/u/te05/logs/inquireCatalog.log
--由DFHLS2WS生成的log文件

由于下文创建PIPELINE资源时需要用到该JCL生成的WSBIND文件,
且PIPELINE定义中存放WSBIND文件的参数Wsdir指定了另一个目
录/u/te05/wsapp/wsdir/,所以这里需要将生成的
/u/te05/wsapp/wsbind/inquireCatalog.wsbind手工拷贝到
/u/te05/wsapp/wsdir/中。可在主机的OMVS环境中完成该操作。
具体操作略。
2.对查询单个条目的程序,我们同样用DFHLS2WS 生成相应的WSBIND文
件、WSDL文件及LOG文件,具体步骤如下:
(1)CICS安装好以后,称为DFH0XCP4的COMMAREA文件就自动安装在
CICSTS.V3R1.CICS.SDFHSAMP中,将DFH0XCP4拷贝到事先建好的自己的
数据集TE05.EXMPLAPP.CPY中。步骤略。
(2)运行如下JCL产生重要的文件:

对于DFHLS2WS的解释及该JCL中主要参数的解释同上面查询目录的程序
的例子类似,故略。

由于下文创建PIPELINE资源时需要用到该JCL生成的WSBIND文件,
且PIPELINE定义中存放WSBIND文件的参数Wsdir指定了另一个目
录/u/te05/wsapp/wsdir/,所以这里需要将生成的
/u/te05/wsapp/wsbind/inquireSingle.wsbind手工拷贝到
/u/te05/wsapp/wsdir/中。可在主机的OMVS环境中完成该操作。
具体操作略。
3.对下订单的程序,我们同样用DFHLS2WS 生成相应的WSBIND文件、
WSDL文件及LOG文件,具体步骤如下:
(1)CICS安装好以后,称为DFH0XCP5的COMMAREA文件就自动安装在
CICSTS.V3R1.CICS.SDFHSAMP中,将DFH0XCP5拷贝到事先建好的自己的
数据集TE05.EXMPLAPP.CPY中。步骤略。
(2)运行如下JCL产生重要的文件:

对于DFHLS2WS的解释及该JCL中主要参数的解释同上面查询目录的程序
的例子类似,故略。

由于下文创建PIPELINE资源时需要用到该JCL生成的WSBIND文件,
且PIPELINE定义中存放WSBIND文件的参数Wsdir指定了另一个目
录/u/te05/wsapp/wsdir/,所以这里需要将生成的
/u/te05/wsapp/wsbind/placeOrder.wsbind手工拷贝到
/u/te05/wsapp/wsdir/中。可在主机的OMVS环境中完成该操作。
具体操作略。



4.创建PIPELINE定义。
完整的Pipeline定义包括一个PIPELINE资源和一个Pipeline配置文件。
该文件包含了消息处理程序的详细信息,这些消息处理程序处理通过
Pipeline的Web请求和响应。
样例应用程序使用CICS提供的SOAP 1.1处理程序来处理进入和离开请
求的SOAP信封。CICS提供可以在服务提供者和服务请求者中使用的样
本Pipeline配置文件。
超过一个WEBSERVICE可以共享一个单个的PIPELINE,因此我们只需要
为样例应用程序的进入请求定义一个Pipeline。然而,我们还必须为
离开请求定义第二个Pipeline,因为单个Pipeline不能被同时配置成
提供者和请求者Pipeline。

(1)使用CEDA交易来为服务提供者创建一个PIPELINE定义。
1)在CICS Region里输入:CEDA DEF PIPE(EXPIPE01) G(CICSWS05)。
或者也可以从CICS提供的资源组DFH$EXWS中拷贝PIPELINE定义。
2)输入如下额外的属性:

注意HFS条目是大小写敏感的,粗体的参数为必填参数。
3)文件basicsoap11provider.xml将被自动创建起来,内容如下:

(2)使用CEDA交易来为服务请求者创建一个PIPELINE定义。
1)在CICS Region里输入:CEDA DEF PIPE(EXPIPE02) G(CICSWS05)。
或者也可以从CICS提供的资源组DFH$EXWS中拷贝PIPELINE定义。
2)输入如下额外的属性:

注意HFS条目是大小写敏感的,粗体的参数为必填参数。
3)文件basicsoap11requester.xml将被自动创建起来,内容如下:



5.定义TCPIPSERVICE。
当客户端通过HTTP连接到Web服务,我们必须定义一个TCPIPSERVICE来
接收进入的HTTP流量。
使用CEDA交易来创建一个TCPIPSERVICE定义来处理进入的HTTP请求。
(1)在CICS Region里输入:CEDA DEF TCPIPSERVICE(EXMPPORT)
G(CICSWS05)。或者也可以从CICS提供的资源组DFH$EXWS中拷贝
TCPIPSERVICE定义。
(2)输入如下额外的属性(部分):
注:粗体的参数为必填参数。






6.动态安装WEBSERVICE和URIMAP资源。
暴露为Web服务的每一个功能需要一个WEBSERVICE资源来在SOAP BODY
的进入的XML和程序的COMMAREA接口之间做映射,URIMAP资源将进入的
请求路由到正确的PIPELINE和WEBSERVICE。
虽然我们可以使用RDO来定义和安装WEBSERVICE和URIMAP资源,我们也
可以当安装一个PIPELINE资源时由CICS来动态创建上述两个资源。
在CICS Region里运行以下命令来安装PIPELINE资源:
CEDA INSTALL PIPELINE(EXPIPE01) G(CICSWS05)
CEDA INSTALL PIPELINE(EXPIPE02) G(CICSWS05)
当我们安装每一个PIPELINE资源时,CICS扫描在PIPELINE的WSDIR属性
(pickup目录)中指定的目录。
对于在目录中的每一个Web服务绑定文件,也就是对每一个有.wsbind
后缀的文件,CICS都会安装一个WEBSERVICE和URIMAP资源,如果这两
个资源不存在的话。
如果在绑定文件里的信息比现有的资源更新的话,那么后者会被替代。



当PIPELINE后来被禁用并丢弃时,所有相关的WEBSERVICE和URIMAP资
源也会被丢弃。
如果已经安装了PIPELINE,使用PERFORM PIPELINE SCAN命令来初始化
PIPELINE的Pickup目录的扫描。
当安装了PIPELINEs资源后,以下的主要的WEBSERVICEs和相关的
URIMAPs将会安装在系统中:
– inquireCatalog
– inquireSingle
– placeOrder


WEBSERVICEs的名字从Web服务绑定文件的名字而来;URIMAPs的名字自
动产生。
可以用CEMT I WEBS和CEMT I URIMAP命令来查看WEBSERVICEs和
URIMAPs资源。

CEMT I WEBS将显示以下与本样例程序相关的WEBSERVICE资源:

点中WEBSERVICE inquireSingle并按回车可看以下详细信息:

其他两个WEBSERVICE资源的信息与此类似,故略。

CEMT I URIMAP将显示以下与本样例程序相关的URIMAP资源:

点中URIMAP $056260并按回车可看以下详细信息:

其他两个URIMAP资源的信息与此类似,故略。


7.(可选的)用RDO创建WEBSERVICE资源。
作为使用PIPELINE扫描机制来安装WEBSERVICE资源的另一个替代方案,
我们可以使用在线资源定义(RDO)来创建和安装WEBSERVICE资源。
注意:如果使用RDO来定义WEBSERVICE 和URIMAP资源,必须确保Web服
务绑定文件不在PIPELINE的Pickup目录里。
(1)使用CEDA交易来为样例应用程序的查询目录功能创建一个
WEBSERVICE定义。
1)在CICS Region里输入:CEDA DEF WEBSERVICE(EXINQCWS)
G(CICSWS05)
2)输入如下额外属性(部分):
(2)为样例应用程序的每一个如下功能重复前面的步骤。如下表11-2
所示:


8.(可选的)使用RDO创建URIMAP资源。
作为使用PIPELINE扫描机制来安装URIMAP资源的另一个替代方案,我
们可以使用在线资源定义(RDO)来创建和安装URIMAP资源。
注意:如果使用RDO来定义WEBSERVICE 和URIMAP资源,必须确保Web服
务绑定文件不在PIPELINE的Pickup目录里。
(1)使用CEDA交易来为样例应用程序的查询目录功能创建一个URIMAP
定义。
1)在CICS Region里输入:CEDA DEF URIMAP(INQCURI) G(CICSWS05)

2)输入如下额外属性(部分):

(2)为样例应用程序的每一个余下的功能重复前面的步骤。为
URIMAPs使用如下名字,如下表11-3所示:

为每一个URIMAP指定以下不同的属性,如下表11-4所示:

其它属性都与INQCURI的设置相同。

9.完成安装过程。
为了完成安装过程,安装包含所有资源定义的RDO组。在CICS
Region里输入如下命令:CEDA I G(CICSWS05)。现在便可以使
用我们的应用程序了。
11.4 在RAD中测试CICS Web Service

1.从主机端下载并修改WSDL文件。
可以使用FTP将主机服务器端的WSDL文件(以前面用DFHLS2WS程序生成的
inquireSingle.wsdl为例)拷贝到本地(Windows平台),步骤如下:
(1)选择Windows“开始”菜单,点击“运行”,输入cmd,进入DOS环境。
(2)输入:d:,进入D盘根目录。
(3)在d盘创建子目录wsdl,并在DOS环境输入:cd wsdl,进入wsdl子
目录。
(4)ftp 10.60.37.129。
(5)输入用户名和密码。
(6)输入:cd /u/te05/wsapp/wsdl/,进入到inquireSingle.wsdl所在
的目录。
(7)输入:get inquireSingle.wsdl,将该wsdl文件下载到本地目录。
(8)修改inquireSingle.wsdl,找到以下条目:
修改成:


其中my-server代表服务器主机系统的机器名或IP地址,my-port代表在
CICS Region中定义TCPIPSERVICE时的端口号。
自此,WSDL文件下载到了客户端并作了相应修改。
2.在RAD上测试刚刚下载的WSDL文件。
(1)打开 RAD。
(2)新建一个静态Web项目CICSWebService。步骤略。
(3)右击CICSWebService,选择“导入”,选择“文件系统”,在
“从目录”中选择wsdl所在的目录,选中inquireSingle.wsdl,点击
“完成”导入该wsdl文件。如下图11-5所示:
图11-5 在RAD中导入WSDL文件
(4)右击导入的wsdl文件,选择“Web Service”,再选择“使用Web
Service资源管理器测试”。如下图11-6所示:
图11-6 在RAD中测试WSDL文件
(5)在左边栏目找到DFH0XCMNOperation并点击之。
(6)在右边栏目里填入一些值,这些栏目和
TE05.EXMPLAPP.CPY(DFH0XCP4)中的数据结构项相一致,且有些必填有
些可选。如果我们不填任何项直接点击“执行”按钮,系统会提示我
们哪些项必填哪些项可选。如下图11-7和图11-8所示:
图11-7 在栏目里填入相应值(1)
图11-8 在栏目里填入相应值(2)

(7)填写完毕各必填项后点击“执行”按钮,结果如下图所示。从中
可以看到必填项里需要输入的值。
程序最后的运行结果如下图11-9所示:
图11-9 程序最后的运行结果

自此,在RAD上测试WSDL文件成功。
11.5 在WAS中测试运行CICS Web Service程序

1.下面用RAD开发客户端应用程序。
该客户端应用程序包括五个JSP和一个Servlet。
其中Welcome.jsp显示系统首页页面,Configuration.jsp显示系统配
置的页面,InquireSingle.jsp显示查询单个条目的页面,
InquireCatalog.jsp显示查询目录的页面,PlaceOrder.jsp显示下订
单的页面,CatalogController.java是后面三个JSP共同的响应
Servlet。

JSP Welcome.jsp
的代码如右所示(1):

JSP Welcome.jsp
的代码如右所示(2):

JSP InquireSingle.jsp
的代码如右所示(1):

JSP InquireSingle.jsp
的代码如右所示(2):

JSP InquireSingle.jsp
的代码如右所示(3):

其他三个JSP:Configuration.jsp不是本练习要表达的核心内容,
InquireCatalog.jsp和PlaceOrder.jsp由于代码和InquireSingle.jsp
相似,由于篇幅限制,故都在此略去。

Servlet
CatalogController.java
的代码如右所示(1):

Servlet
CatalogController.java
的代码如右所示(2):

Servlet
CatalogController.java
的代码如右所示(3):

Servlet
CatalogController.java
的代码如右所示(4):

Servlet
CatalogController.java
的代码如右所示(5):

Servlet
CatalogController.java
的代码如右所示(6):

Servlet
CatalogController.java
的代码如右所示(7):

Servlet
CatalogController.java
的代码如右所示(8):

Servlet
CatalogController.java
的代码如右所示(9):

Servlet
CatalogController.java
的代码如右所示(10):

Servlet
CatalogController.java
的代码如右所示(11):

Servlet
CatalogController.java
的代码如右所示(12):

Servlet
CatalogController.java
的代码如右所示(13):

2.上述所有代码开发好以后,用RAD打包生成ExampleAppClient.ear文
件,步骤略。
自此,客户端应用程序开发完毕并打包。
3.下面在WAS上安装客户端应用程序。
(1)WebSphere Application Server for Windows的管理控制台界面
如下图11-10所示:
图11-10 WAS管理控制台界面
(2)输入URL:http://localhost:9080/PlantsByWebSphere/ 来运行
其中一个样本程序,如下图11-11所示:
图11-11 在WAS中运行样本程序



(3)将打包好的客户端程序ExampleAppClient.ear安装到WAS上并启
动。
安装步骤同第9章中9.3第18-23步基本类似,唯一不同的是第20步中步
骤3: 将资源引用映射至资源不需要。具体步骤此处略。
自此,客户端程序安装完毕并启动。
4.下面在Web端配置客户端程序
在使用Web客户端之前,我们必须对其进行配置,来调用CICS系统中的
合适的端点。
(1)在Web浏览器输入:
http://localhost:9080/ExampleAppClientWeb/(如果端口号9080被
占用,可使用端口号9081),样例应用程序将显示如下图11-12所示的
页:
图11-12 样例应用程序首页
(2)点击CONFIGURE按钮调出如下图11-13所示的配置页:
图11-13 样例应用程序配置页(1)
(3)为Web服务输入新的端点。有三个端点需要配置:
– Inquire catalog
– Inquire item
– Place order
在各自的“New”条目中,将“localhost”替换成运行CICS的
主机系统名或IP地址,该例中为10.60.37.129;并且将端口
号9080(或9081)替换成配置TCPIPSERVICE时的端口号,该
例中为12305。如下图11-14所示:
图11-14 样例应用程序配置页(2)
(4)点击SUBMIT按钮。图略。
自此,Web客户端程序配置完毕。
5.下面将运行含Web服务的应用程序。可以从Web浏览器中调用样例应
用程序。
(1)在Web浏览器中输入以下网址:
http://localhost:9080/ExampleAppClientWeb/,样例应用程序将显
示的页如图11-12所示,故略。
(2)列出目录里面的条目、选择单个条目并订购
1)点击LIST ITEMS按钮,样例应用程序将显示如下图11-15所示的页:
图11-15 点击LIST ITEMS后样例应用程序的显示页
2)在Start List From Item Number右边输入条目号,点击SUBMIT按
钮,样例应用程序将显示如下图11-16所示的页。该页包含了目录里的
条目列表,以我们输入的条目号起始:
图11-16 目录里的条目列表显示页
3)选择其中一个条目(比如选第一个),点击SUBMIT按钮,样例应用
程序将显示如下图11-17所示的订购页:
图11-17 样例应用程序的订购页
4)为了完成一个订购,输入以下信息:
– 在Quantity域指定想要订购的条目数量。
– 在User Name域输入1-8个字符串。样例应用程序不会检查在此输入的值。
– 在Department Name域输入1-8个字符串。样例应用程序不会检查在此输入
的值。

点击SUBMIT按钮。样例应用程序显示如下图11-18所示的页来确认订购
已经完成:
图11-18 样例应用程序的订购成功页
(3)列出单个条目的内容
1)点击INQUIRE按钮,样例应用程序将显示如下图11-19所示的页:
图11-19 点击INQUIRE后样例应用程序的显示页
2)在Item Reference Number右边输入条目号,点击SUBMIT按钮,样
例应用程序将显示如下图11-20所示的页:
图11-20 提交某条目后的显示页
3)点击SUBMIT按钮,样例应用程序将显示如下图11-21所示的订购页:
图11-21 样例应用程序的订购页(2)
4)后续的操作与前面第5步(2)中4)后面的操作相同,故略。
(4)订购单个条目
1)点击ORDER ITEM按钮,样例应用程序将显示如下图11-22所示的页:
图11-22 点击ORDER ITEM后样例应用程序的显示页

2)后续的操作与前面第5步(2)中4)后面的操作相同,故略。
自此,采用CICS Web Service实现CICS程序的Web化的练习步骤全部完
成了。