内容


通过 TXSeries for Multiplatforms 使用和配置 Web 服务

简介

Web 服务 是自包含的、模块化的应用程序,该应用程序可以在整个网络中进行描述、发布、定位和调用。Web 服务执行封装的业务功能,范围从简单的请求-答复功能到完整的业务流程交互。

这些服务可以是新的应用程序或围绕现有业务功能以启用其面向服务的体系结构 (SOA) 的能力。这些服务可以依靠其他的服务来实现目标。

图 1. 服务
服务
服务

TXSeries for Multiplatforms 是一个用于混合语言应用程序的分布式 CICS(客户信息控制系统)在线事务处理 (OLTP) 环境。它广泛地用于集成分布式解决方案和企业系统之间的数据和应用程序,以及使用 COBOL、C、 C++ 和 PL/I 编写的 CICS 应用程序的部署。

支持 pac CN01 的 TXSeries For Multiplatforms 7.1 可支持入站 SOAP 请求,其现有的程序表现为服务。当将这些程序部署为服务时,任何 SOAP Web 服务请求者都可以通过 HTTP 访问这些服务器程序。

TXSeries 中 Web 服务的体系结构

图 2. CICS 作为 Web 服务公开
CICS 作为 Web 服务公开
CICS 作为 Web 服务公开

TXSeries 使用以上的体系结构将 CICS 服务器程序作为 Web 服务公开

轻量级基础架构 (LWI)

轻量级基础架构解决了最小占用的需要、便于配置、确保宿主 Web 应用程序和 Web 服务的基础架构安全。轻量级基础架构的作用类似于 TXSeries Web 服务的 Web 请求网关。

Servlet 引擎

Servlet 引擎从 SOAP 客户机接收 SOAP 请求,它使用 URIMapping 模块、转换模块和连接器模块获得响应,并且将 SOAP 响应或 SOAPFault 返回给 SOAP 客户机。

URIMapping 模块

基于通过 SOAP 客户机请求的 URI,URIMapping 模块发现 CICS 程序和必须连接的区域,并将这些细节提供给 Servlet 引擎。

转换模块

这是 Servlet 引擎的支持模块,它接收 SOAP Body 并将它转换成 COMMAREA 字节缓冲,反之亦然。

连接器模块

该模块实际上连接到 TXSeries,并且通过 COMMAREA 字节缓冲调用 CICS 程序,同时接收 COMMAREA 并将其发送回 Servlet 引擎。

DFHLS2WS 工具

通过使用 DFHLS2WS 工具,我们可以利用命令行或 Java API 选项生成 WSDL 和 WSBind WSBind 工件。

WSBind 文件的角色

TX Series 使用 WSBind 文件中的信息在运行时执行应用程序数据结构和 SOAP 消息之间的映射。

示例解释

在随后的部分,我们将提供一个简单的员工示例并使您了解相关步骤,这些步骤将解释如何配置、部署和测试安装了 TX Series 的 Web 服务。我们也会使您了解一些需要解释的示例程序中的关键命令。

本文提供的示例会帮助配置和测试 Web 服务。安装脚本(适用于 Unix-Like 和 Windows 平台)、employee.ccs 服务器程序(用于检索 commarea)和 employee.h(头文件)将被作为一个压缩包提供。

安装脚本用于在 SFS 服务器中生成示例记录并完成所需配置。配置文件中运行所需配置的 Snippet 如下所示:

清单 1. 安装脚本
cicssdt -s /.:/cics/sfs/sample  -c create Employee sfs_Ssample 
B empId signedInt32 empName string 50 empSalary double  " 
" "10                      " empId Y empId a " " 1 quit

cicssdt -s /.:/cics/sfs/sample -c w Employee 100 Srinivas 7000 
"N" quit

cicsadd -c fd -r sample -P Employee IndexName=empId

Cicssdt 命令创建一个被称为 Employee 的表格,并定义了 3 个字段,即 empId、empName 和 empSalary。

第二个 cicssdt 命令输入数据到员工表格中,同时 cicsadd 命令会添加一个文件定义入口。

清单 2. employee.ccs 示例
EXEC CICS READ FILE("EMPL")
		 INTO(ca) 
		 RIDFLD(&ca->empId)
                   KEYLENGTH(4)
		 RESP(resp);

该示例使用通过 commarea 接收到的员工 ID 读取 SFS 中的员工细节,并把它们放入响应 commarea 中。

下图显示了流程并解释了不同组件所处的确切位置:

图 3. 组件位置
组件位置
组件位置

配置、部署和用法

1. CICS 区域配置

首先并且最重要的是,我们需要标识一个作为 Web 服务公开的 CICS 程序

为该区域的服务器程序定义程序定义。因此我们要在 TX Series 服务器中添加一个 PD(程序定义)入口。该命令如下:

Cicsadd –c pd –r <region name> <PD entry name> 
Pathname=<Path where the program is kept>

定义该区域内 IPIC Listener Definition

Cicsadd –c ld –r <region name> <LD entry name> 
Protocol=IPIC TCPAddress="<machine IP or hostname>

使用服务名称和端口号在 /etc/services 中创建具有相应端口的服务条目。这些服务文件位于 C:\WINDOWS\system32\drivers\etc 目录下,且文件的名字就是服务的名字。

启动 CICS 区域 并确保控制台日志上没有错误。

控制台文件可以签入到 /var/cics_regions/<region_name>/console.000000n(其中 n 是最新控制台文件的编号)。

2. 使用 DFHLS2WS 工具生成工件

使用 DFHLS2WS 命令行工具或 Java API 生成工件 (Wsdl & WSBind)。部署 TXSeries 应用程序作为 Web 服务的先决条件是使用 8 字节的边界进行编译。

DFHLS2WS 工具简化了将 CICS 应用程序部署为服务提供者这一任务。在使用 DFHLS2WS 工具时,首先需要处理语言数据结构,并使用 DFHLS2WS 工具生成 Web 服务工件。

DFHLS2WS 工具是一系列 jar 文件, 这些 jar 文件提供用于生成所需工件的设施。要使用这些设施,系统 CLASSPATH 中需要有如下 jar 文件。

  • common.jar
  • common.resources.jar
  • ecore.change.jar
  • ecore.jar
  • ecore.xmi.jar
  • NamespaceContext.jar
  • woden.jar
  • wsdl4j.jar
  • XmlSchema.jar
  • xsd.jar
  • xsd.resources.jar
  • cwsa.jar

您可以通过以下方式使用 DFHLS2WS 工具:

  • 使用命令行模式
  • 使用 Java APIs 模式

使用任何如上描述的模式将生成如下工件:

  • employee.wsdl
  • employee.wsbind
  • employee.log

以上 3 个工件中,您需要用 Wsdl 文件和 bind 文件将服务器程序作为一个 Web 服务公开。您必须在 LWI 中配置这两个文件。

该 Wsdl 文件由 SOAP 通过 HTTP 客户机应用程序来使用。Bind 文件由 TXSeries LWI 内部使用,用于数据操作。

  • 在 Windows 系统上,发出如下命令:DFHLS2WS.bat inputParams
  • 在 Unix 系统上,发出如下命令:DFHLS2WS.sh inputParams

其中 inputParams 是一个带参数的输入文件。

以下示例程序表明 Java API 的用法:

 import com.ibm.cics.gen.api.Factory;
                import com.ibm.cics.gen.api.IAssistantParameters;
                import com.ibm.cics.gen.api.ICICSWebServicesAssistant;
                import com.ibm.cics.gen.api.IAssistantResponse;

                   public class Test {

	        public static void main(String[] args) throws Exception {
	        String structDir = "C:\\test\\CStructures";
	        String structSource = "cstruct.h";
	        String bindFileName =
                            "C:\\test\\CStructures\\employee.wsbind";  
	        String logFileName = 
                            "C:\\test\\CStructures\\employee.log";
	        String wsdlFileName =
                             "C:\\test\\CStructures\\employee.wsdl"; 
	        IAssistantParameters params =
                             Factory.createAssistantParameters(); 

                   params.setParamURI
                   ("http://localhost:8080/txws/myregion/employee");
	        params.setParamLANG(IAssistantParameters.LANG_C);
	        params.setParamPDSLIB(structDir);
	        params.setParamPGMINT
                   (IAssistantParameters.PGMINT_COMMAREA);
	        params.setParamPGMNAME("EMPLOYEE");
	
	        params.setParamMAPPING_LEVEL
                   (IAssistantParameters.MAPPING_LEVEL_2);
	
	        params.setParamREQMEM(structSource);
	        params.setParamRESPMEM(structSource);
	        params.setParamSTRUCTURE("(message, message)");
	        params.setParamWSBIND(bindFileName);
	        params.setParamWSDL(wsdlFileName);
	        params.setParamLOGFILE(logFileName); 
	
	        ICICSWebServicesAssistant cwsa =
                   Factory.createCICSWebServicesAssistant();  
	        IAssistantResponse ar = cwsa.DFHLS2WS(params);
                   System.out.println(
	        "DFHLS2WS:AssistantResponse.getReturnCode():" +
                   ar.getReturnCode());  
	        System.out.println("AssistantResponse.getMessages()");
                   String[] msgs = ar.getAllMessages();
	        for (int i = 0; i < msgs.length; i++)
	        {
	            System.out.println(msgs[i]);
	        }
	        }
                   }

3. 在 LWI 中配置已生成的工件

每一个程序都需要一个 <uri-map> 条目,该条目处在 <TXInstall-Dir>/wui/ws_conf 目录下的 TXWSMapping.xml 文件中。Wsdl 和 WSBind 文件需要手动复制到 TXSeries <TXInstall-Dir>/wui/ws_conf/<region-name>/ <program-name> 目录下。

要将程序作为 Web 服务公开,我们需要在 TXSeries 已安装系统的 LWI 中配置已生成的工件,以将程序作为 web 服务公开。因为我们已经提供了 http://localhost:8082/txws/myregion/myprog 作为 URI,用于通过 DFHLS2WS 生成工件。

1. 因为我们已经提供了 http://localhost:8082/txws/myregion/myprog 作为 URI,用于通过 DFHLS2WS 生成工件,因此我们需要在 <TXSeries install dir>/wui/ws_conf 下创建如下目录。
myregion/employee
(例如:/wui/ws_conf/myregion/employee)

注意:Txws 目录作为 TXSeries Web 服务的内容根目录。每一个 URI 在主机名和端口编号后都被强制使用 txws 作为开头。

2. 将如下工件复制到上述所创建的目录下。

  • employee.wsdl
  • employee.wsbind

工件复制后,您需要在 TXWSMapping.xml 中为工件创建一个条目。示例文件 TXWSMappingSample.xml 将位于 <TXSeries install dir>/wui/ws_conf 目录下。您将在该文件中发现一个已注释的示例条目。将示例文件 <TXSeries install dir>/wui/ws_conf/TXWSMappingSample.xml 复制并粘贴到 <TXSeries install dir>/wui/ws_conf/TXWSMapping.xml

3. 将示例文件 TXWSMappingSample.xml 复制为 TXWSMapping.xml,并在 <maps> 元素内创建一个 <uri-map> 条目。

<maps xmlns="http://www.ibm.com/TXSeries/TXWSMappingSchema">
<uri-maps>
			<map-name>/txws/myregion/myprog</map-name>
      <description> Optional description goes here </description>
			<program-name> myprog</program-name>
			<region-name> myregion</region-name>
			<wsbind>myprog.wsbind</wsbind>
			<wsdl>myprog.wsdl</wsdl>
			<ipic-port>55555</ipic-por>
</uri-map>
</maps>

注意:

  • 如果您正在 TXWSMapping.xml 中添加其他新的条目,那么在这之后您要在 <maps> 标记下添加一个新的 <uri-map> 部分。
  • 命名空间 URI http://www.ibm.com/TXSeries/TXWSMappingSchema 是强制性的。
  • 使用 SOAP over HTTP 的客户机可以像普通的 Web 服务那样访问 CICS 程序。
  • 一旦服务器程序被成功部署,通过打开浏览器和输入带有查询字符串 Wsdl 的 URL(如:http://localhost:80/txws/myregion/employee?wsdl),您就可以查看已配置的 Wsdl。

所有这些设置完成以后,可以启动客户机,然后调用 Web 服务

4. 通过查看浏览器中的 Wsdl 来验证 配置。

一旦配置完成,即可使用 URL http://<servername>:<LWI-http-port>/<map-name>?wsdl 来查看 Wsdl。例如:http://localhost:8082/txws/myregion/AGE?wsdl

使用 Rational Developer for System z (RDz) 7.6 生成工件

在这个部分,我们将带您了解如何使用 RDz 生成工件。

  1. 首先,创建一个 Web 服务项目。在 RDZ 7.6 向导中,转到文件 > 新建 > 项目。“New project” 窗口将弹出,请选择一个 Web 服务项目。
图 4. 为 CICS 项目创建新的 Web 服务
为 CICS 项目创建新的 Web 服务
为 CICS 项目创建新的 Web 服务

选择此处的 “Next”,然后给定一个项目名称。完成上述步骤后,选择 “Finish” 来完成这个项目创建练习。

图 5. 命名项目
命名 CICS 项目
命名 CICS 项目

TXSeries 只支持自下而上的部署场景,即 Application 模式的 Service Provider 模式和 Interpretive Conversion 模式。

图 6. 导入资源文件
导入资源文件
导入资源文件

下一步是导入资源示例。一旦完成请单击 “Finish” 来完成该初始步骤。

  1. 创建项目后,项目名称可以在向导最左侧窗格看到。右键单击项目名并单击 “Generate Web Services for CICS resources”。
图 7. 语言结构
语言结构
语言结构

我们可以看到如上显示的窗口弹出。这时我们要转到 “Request language Structure” 和 “Response Language Structure” 这两个选项卡,并选择 “All-Type” 复选框。我们可能希望更改一些 COBOL 首选项(如代码页选择),这可以通过 “Change COBOL Preferences” 按钮来实现。我们需要确保在 COBOL 首选项中只支持 IEEE 浮点。显示 COBOL 首选项的截屏如下所示。单击 “Apply”,然后按 “Ok” 以返回 “Language Structures” 窗口。

图 8. COBOL 首选项
COBOL 首选项
COBOL 首选项

在完成所有步骤后,选择 “Next”。

图 9. 应用程序和服务属性
应用程序和服务属性
应用程序和服务属性

这时我们可以更改程序名称。TXseries 仅仅支持 COMMAREA 程序接口。服务属性选项卡包含命名空间属性。我们应该单击 “Change WSBind Preferences” 并且确保映射等级设置为 2.0。在 DFSLS2WS 选项卡中,我们会发现一些重要的属性(如 SOAP 版本和 Wsdl 版本)的默认设置为 1.1。

图 10. Web Services Assistant (WSBind)
Web Web Services Assistant (WSBind)
Web Web Services Assistant (WSBind)

这之后我们继续选择 DFHLS2WS 上的 “Next”:Application and Service 窗口。

图 11. 目标工件
目标工件
目标工件

这时我们为 Wsdl、WSBind 和日志文件指定名称。然后单击 “Next” 和 “Finish” 来完成 “生成工件” 步骤。我们可以通过展开向导最左侧窗框中的项目名称来验证已经创建的工件。

图 12. 验证工件
验证工件
验证工件

已生成的工件现在可以像步骤 3 “在 LWI 中配置已生成工件” 中所描述的一样来进行使用。

结束语

通过对 TXSeries for Multiplatforms 的入站 SOA 支持,运行在分布式平台上的 CICS 程序可以更容易地表现为 Web 服务。支持工具使得该转换既简单又无缝。

有了这些特性,TXSeries 将成为任何基于 SOA 的解决方案的不可或缺的组成部分。


下载资源


相关主题

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services
ArticleID=605997
ArticleTitle=通过 TXSeries for Multiplatforms 使用和配置 Web 服务
publish-date=01042011