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

上传人:b****6 文档编号:21088973 上传时间:2023-01-27 格式:DOCX 页数:23 大小:391.02KB
下载 相关 举报
Web service 与 CICS 事务处理应用的集成Word格式.docx_第1页
第1页 / 共23页
Web service 与 CICS 事务处理应用的集成Word格式.docx_第2页
第2页 / 共23页
Web service 与 CICS 事务处理应用的集成Word格式.docx_第3页
第3页 / 共23页
Web service 与 CICS 事务处理应用的集成Word格式.docx_第4页
第4页 / 共23页
Web service 与 CICS 事务处理应用的集成Word格式.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

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

《Web service 与 CICS 事务处理应用的集成Word格式.docx》由会员分享,可在线阅读,更多相关《Web service 与 CICS 事务处理应用的集成Word格式.docx(23页珍藏版)》请在冰豆网上搜索。

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

开发语言:

Java

2.开发步骤

新建一个动态web项目。

在IBMRAD7开发环境中,选择"

File->

New->

Project"

选择动态web项目,命名为exchange,保留其它选项默认值。

编写要暴露成Webservice的Javabean。

右键点击JavaResources:

src目录,选择"

Class"

,填写包名rate、类名Rate。

Javabean源代码如清单1所示,提供了人民币对美元和人民币对欧元的汇率。

清单1.JavaBean源代码

packagerate;

publicclassRate{

doubleRMBtoDollar=0.1426;

doubleRMBtoEuro=0.09026;

StringerrorMsg="

Inputisnotcorrect"

;

publicdoublegetRate(Stringsource,Stringtarget){

if(source.equalsIgnoreCase("

RMB"

)){

if(target.equalsIgnoreCase("

Dollar"

))

returnRMBtoDollar;

Euro"

returnRMBtoEuro;

}

//anyinputerror,return0

return0;

}

}

将JavaBean封装成Webservice。

右键点击项目名称exchange,选择"

Other->

WebServices->

WebService"

设置Webservice的构建方式,选择"

BottomUpJavaBeanWebService"

——自底向上(由JavaBean生成WSDL文件)的构建方式。

同时指定Rate类作为该JavaBean,如图2所示。

点击"

Finish"

,一个Webservice便构建成功。

在"

...\exchange\WebContent\WEB-INF\wsdl"

目录下可以找到刚刚生成的Rate.wsdl文件。

wsdl文件描述了该服务的相关信息,该文件可从附件中下载查看。

图2.设置Webservice构建方式

部署Webservice到应用服务器。

启动应用服务器(这里是WebsphereApplicationServer6.1),加载该动态项目的EAR包exchangeEAR。

3.测试Webservice

利用内嵌在RationalApplicationDeveloper开发环境中的Webservice客户端工具(WebServicesExplorer)测试RateService是否工作正常。

首先在"

目录下找到Rate.wsdl文件,右键单击该文件选择"

TestwithWebServicesExplorer"

,打开客户端测试窗口。

WebServicesExplorer"

窗口左侧找到Rate.wsdl文件,选中该WebService提供的操作(Operation)——"

getRate"

,窗口右侧出现该服务的详细描述并提供输入界面并显示输出结果。

在source项中输入RMB,在target项中输入DOLLAR,得到人民币对美元的汇率0.1426。

这说明RateService运行正常,如图3所示。

图3.使用WebServicesExplorer测试Webservice

4.发布RateService到WSRR(WebSphereServiceRegistryandRepository)。

最后需要将描述RateService的wsdl文件(Rate.wsdl)上传到WSRR->

WSDL管理中心,由WSRR统一管理,方便用户查找该服务,如图4所示。

CICS在3.2版本之后于2008年上半年发布了支持WSRR的工具包,将在下文详细介绍。

图4.WSRR发布RateService

第二步:

转账服务的实现

CICS3.2onz/OS,DB2v8onz/OS

C语言

2.CICSWebservice相关概念。

CICS对Webservice的支持主要通过以下几方面来实现:

CICS支持Webservice的相关资源,主要有PIPELINE、URIMAP、WEBSERVICE、TCPIPSERVICE等,这些资源能够定义WebService的处理过程。

WebServicesAssistant工具,最新的CICS3.2工具包主要由两个程序组成:

DFHWS2LS和DFHLS2WS。

它们在3.1的版本上有所增强,提供了更丰富的支持,可支持的语言包括:

COBOL、PL/I、C、C++。

用户可以通过使用WebServicesAssistant来快速方便地实现WebService,也可以通过自己编程完全地控制CICS程序和WebService接口之间的数据交互。

∙DFHWS2LS:

帮助用户把WSDL文件中的数据定义映射为CICS程序所使用编程语言的数据结构。

∙DFHLS2WS:

帮助用户把高级语言编写的CICS程序所使用的数据结构转换成WSDL定义。

支持WebService的CICSAPI,例如INQUIREWEBSERVICE,INVOKEWEBSERVICE等。

此外CICS在推出3.2版之后又发布了一个独立的工具包CICSSupportPacforWSRR,支持CICSWebservice与WSRR的结合使用。

这个工具包主要包含两个程序:

DFHWS2SR和DFHSR2WS。

∙DFHWS2SR:

帮助用户来把已有的wsdl文件从主机USS系统中发布到WSRR。

∙DFHSR2WS:

用来帮助用户把发布在WSRR上的wsdl文件下载到主机USS系统中。

3.背景分析

转账服务(TransferService,下文中两者通用)通常是部署在CICS上的一个应用程序,它负责完成各种货币之间的兑换和帐户的转账交易,这是CICS应用程序在银行业务中最常见的一种应用。

在没有引入Webservice以前,转账服务必须将有关汇率的处理包含在程序逻辑之内,增加了程序的耦合性。

最好的情况也只能封装成CICS区域(region)上的不同应用程序,通过CICS提供的程序之间或区域之间通信的API来互相调用。

这样一来汇率服务就很难与其他平台和语言编写的程序实现互操作。

而Webservice的引入有效的解决了上述问题,充分实现了服务的可重用性和互操作性。

转账服务的详细处理逻辑:

转账服务首先作为Webservice的服务端(provider),等待客户端的参数输入。

输入包括四个参数:

用户名、转账金额、源账户、目标账户。

例如:

Zhanglin,100,rmb,dollar四个参数表示从zhanglin的人民币账户中转出100元人民币到他的美元账户。

转账过程中,需要用到人民币与美元之间的汇率。

此时,转账服务转变角色,作为Webservice的客户端(requester)调用RateService提供的汇率服务。

4.开发步骤

下面通过Webservice封装转账服务的详细步骤,向读者展示CICSWebservice的应用,并结合实际应用阐述以上有关CICSWebservice相关的理论和概念。

转账服务作为RateService的客户端(requester),需要知道RateService相关描述,所以必须首先通过DFHSR2WS从WSRR上下载描述RateService的Rate.wsdl文件。

在主机上通过提交一个JCL,指定相关参数,便可以调用DFHSR2WS程序,将Rate.wsdl文件下载到USS系统文件夹下。

JCL源码如清单2所示:

清单2.调用DFHSR2WS下载Rate.wsdl文件的JCL源代码

*****************************TopofData******************************

//DSR2WSRTJOBMSGCLASS=H,CLASS=A,NOTIFY=&

SYSUID,REGION=0M

//*********************************************************************

//**

//*DESC:

retrievethewsdlfilefromWSRR*

//WSDLREADJCLLIBORDER=LIUGUAN.CA1N.JCL

//EXECEXECDFHSR2WS,

//JAVADIR='

java142s/J1.4'

//WORKDIR='

/u/liuguan/install'

//TMPDIR='

/tmp'

//TMPFILE='

SR2WS'

//INPUT.SYSUT1DD*

HOSTPORT=:

9080

LOCATION=/u/liuguan/userdemo/wsdl/

LOGFILE=/u/liuguan/userdemo/wsdl/wsdlrate.log

NAME=Rate.wsdl

*/

****************************BottomofData****************************

∙Dataset"

LIUGUAN.CA1N.JCL"

指定了执行DFHSR2WS程序所需要的相关资源

∙HOSTPORT指定WSRR部署的服务器和端口。

∙LOCATION指定wsdl文件存放在USS下的具体位置。

∙LOGFILE指定日志文件,记录程序执行成功或失败的相关信息。

∙NAME指明在WSRR上要下载的wsdl文件名。

上述参数是执行DFHSR2WS所必须的,其他参数及有关于DFHSR2WS更详细的介绍可以在工具包的帮助文档中查到。

Rate.wsdl文件成功下载后,即可以通过CICS3.2工具包中的DFHWS2LS程序,将wsdl文件中描述的输入输出转换成具体语言的数据结构,提供给转账服务程序使用。

调用DFHWS2LS仍然通过提交一个JCL,成功执行后会有两个member产生,一个描述服务的输入,另一个描述输出。

JCL的源码如清单3所示:

清单3.调用DFHWS2LS实现XML到data转换的JCL源代码

//TWS2LSJOB616,LGJ,MSGLEVEL=(1,1),REGION=0M,NOTIFY=&

SYSUID

//*JUSTIN

//*THISJCLCONVERTWSDL(GETFROMPROVIDER)TOLANGUAGESTRUCTURE

//*ANDWSBINDFILE

//*THISISASAMPLEOFWSCELL

//MYPROCJCLLIBORDER='

CTS320.CICS650.SDFHINST'

//JAVAPROGEXECDFHWS2LS,PATHPREF='

'

USSDIR='

cerbsf'

//STEPLIBDDDSN=CTS320.CICS650.SDFHINST,DISP=SHR

//DDDSN=CNTESTD.CICS.C.SRC,DISP=SHR

//INPUT.SYSUT1DD*

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/userdemo/wsdl/Rate.wsdl

/*

//

****************************BottomofData****************************

CTS320.CICS650.SDFHINST"

指定了执行DFHWS2LS程序所需要的相关资源。

∙PDSLIB指定输入输出两个member产生的位置。

∙REQMEM指定转换输入的数据结构。

∙RESPMEM指定转换输出的数据结构。

∙LANG指定要转换为哪种语言的数据结构。

∙WSBIND指定转账服务在作为Webservice客户端所需要的相关配置信息,它将会在PIPELINE安装时用到。

通过wsbind文件,真正的语言结构(LanguageStructure)和SOAP包中xml对于数据结构的定义才能相互对应并转换。

∙WSDL则指定要生成LanguageStructure的wsdl文件。

JCL执行成功后,会在Dataset"

LIUGUAN.ACICS.WSAT.SOURCE"

生成两个member,RATEO01和RATEI01(末尾加上01是DFHWS2LS的命名规则)。

RATEO01中存储的是TransferService作为RateService客户端请求RateService时发出的数据结构,源码如清单4所示(主机中因为编码的原因?

?

(代表[,而?

)代表],下同):

清单4.RATEO01源代码

structratestq01

{

struct

charsource?

(255?

);

chartarget?

}getRate;

};

RATEI01则存储的是经过RateService处理请求之后返回给TransferService的数据结构,源码如下:

清单5.RATEI01源代码

structratestr01

chargetRateReturn?

(32?

}getRateResponse;

在产生了上述的wsbind文件和相应的输入输出数据结构之后,便可以开始TransferService代码的编写。

TransferService作为Webservice的服务端(provider)也必须定义输入和输出数据结构两个member文件,分别为TRANSI和TRANSO。

TRANSI中的输入结构必须命名为CMDINPUT,TRANSO中的输出结构则必须命名为OUTPUT。

根据上文提到的逻辑,输入结构(CMDINPUT)中应该有四个值:

用户名,转账金额,源账户和目标账户,如清单6所示。

输出结构(OUTPUT)中定义账户转账之前和之后的金额两个值,如清单7所示。

清单6.TRANSI中CMDINPUT结构体的定义:

structCMDINPUT

charuser?

charsum?

};

清单7.TRANSO中OUTPUT结构体的定义:

structOUTPUT

charbefore?

charafter?

完成上述准备工作,焦点转移到TransferService程序的逻辑编写,该程序命名为TRANSFER。

TRANSFER程序中几段核心的源码介绍如下。

清单8.CICSDB2应用接口的声明:

EXECSQLBEGINDECLARESECTION;

chardbuser?

(11?

doublemoney=0;

doublermb_account=0;

doubletarget_account=0;

EXECSQLDECLARELIUGUAN.USERDEMOTABLE(

USER_NAMECHAR(10)NOTNULL,

RMB_ACCOUNTDOUBLE,

DOLLAR_ACCOUNTDOUBLE,

POUND_ACCOUNTDOUBLE,

EURO_ACCOUNTDOUBLE,

JPY_ACCOUNTDOUBLE,

HKD_ACCOUNTDOUBLE,

TWD_ACCOUNTDOUBLE,

KRW_ACCOUNTDOUBLE

);

EXECSQLENDDECLARESECTION;

清单8中,"

EXECSQLBEGINDECLARESECTION"

和"

EXECSQLENDDECLARESECTION"

之间声明了程序将会连接的数据库表和相关变量,这是CICS操作DB2的用法,必须在main函数前首先声明。

从这个DECLARESECTION中可以看到程序将会操作数据库名为LIUGUAN下的USERDEMO表。

该表的结构如SECTION所示,已在主机DB2中建好。

完成相关的声明,在函数内部才能使用CICS操作DB2的API。

清单9.CICSWebserviceAPI的应用:

//*putdatainthecontainerandsendtherequesttogetratevalue

EXECCICSPUTCONTAINER(name_container)

CHANNEL(channel_name)

FLENGTH(sizeof(rateout.getRate))

FROM(rateout.getRate);

//*invokethe

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

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

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