使用 WebSphere Studio创建 Web 服务

2002 年 6 月
如果您想在变幻莫测的电子商务世界中获得竞争优势,则必须迅速地将新功能推向市场。新的企业应用程序(“新新人类”)通常利用原有程序,这些原有程序是用各种语言编码的(象 C 和 COBOL 这样的“老前辈”),它们在企业信息系统(Enterprise Information System (EIS))(如 CICS、IMS)或各种 ERP 系统上运行。Web 服务以统一、开放的方式提供利用这些程序的机制。本文说明了如何使用 WebSphere Studio Application Developer Integration Edition,V4.1 提供的工具和能力来创建 Web 服务。作者在本文中包括了一个示例,该示例描述了两个企业是如何集成其过程并访问现有 CICS 程序的。

简介
IBM WebSphere Studio Application Developer Integration Edition,V4.1(以后简称 Application Developer Integration Edition)提供基于开放标准的工具,这样的开放标准有简单对象访问协议(Simple Object Access Protocol (SOAP))、Web 服务描述语言(Web Services Description Language (WSDL))和 Web 服务调用框架(Web Service Invocation Framework (WSIF))。这些工具也广泛支持 J2EE 连接器体系结构(J2EE Connector Architecture (JCA)),JCA 对于访问现有的非关系型 EIS 系统很重要。

在本文中,我们描述了使用 Application Developer Integration Edition 组件来创建 Web 服务的方法。本文使用了一个示例,它描述了两个企业需要如何集成其过程,我们演示了一种基于 Web 服务的企业对企业(B2B)集成方法,并演示了如何访问现有 CICS 程序。

WebSphere Studio Application Developer Integration Edition
WebSphere Studio Application Developer 有两种版本:拥有用于基本开发工作的工具的基本版本和为创建较大型的企业应用程序提供额外支持的 Integration Edition。

基本版本
包括您构建标准 J2EE 应用程序所需要的一切,如用于下列目的的工具:
  • 编写、调试和测试 Java 代码
  • 开发 Web 应用程序(包括 HTML、JavaServer Pages (JSP) 技术和 servlet)
  • 开发 Enterprise JavaBeans(EJB)
  • 编写和使用 XML 文档
Application Developer Integration Edition
包括所有基本功能,并添加了为基于 B2B 集成的企业强度的 Web 服务专门设计的工具。企业服务工具箱(Enterprise Services Toolkit)提供了创新的工具来最大程度地提高开发人员的生产效率,这些工具有:
  • 高级别的、以服务为中心的编程模型(构建在 EJB 组件之上),该模型将开发人员从 EJB 编程的复杂性中解放出来。
  • 用于服务发现和事务元数据捕获的工具。
  • 处理 WSDL 文件的特殊编辑器。
  • 用于从 Java 企业服务创建 Java 实现框架的工具。
  • 符合 JCA 的资源适配器,用于对 EIS 系统进行基于事务的访问。
  • 一个扩展集,您可以将它添加到自己的资源适配器以使该适配器与 Application Developer Integration Edition 工具兼容。
  • IDE 中的特殊透视图 — Enterprise Services 透视图,用来支持企业应用程序开发人员活动。由这种透视图生成的服务是可重用的组件。
  • 让您使用多个服务并在它们之间创建业务逻辑的编辑器。
  • 用于自动化服务打包和部署的向导。
  • 用于创建 Java 代理来调用 Java 企业服务的工具。

Application Developer Integration Edition 提供了下列符合 JCA 的资源适配器:

  • 用于访问 CICS 服务器上的程序的 CICS ECI 资源适配器
  • 用于访问 CICS 服务器上的 3270 程序的 CICS EPI 资源适配器
  • 用于访问带 3270 屏幕的主机系统的 HOD 3270 资源适配器
  • 用于访问 IMS 服务器上的 IMS 程序的 IMS 资源适配器

您可以使用这些开发资源适配器来开发和测试企业服务,但当您向生产环境部署服务时,则需要为该运行时资源适配器获得许可。

假定您有一个未在上面列出的资源适配器。Application Developer Integration Edition 还有一些扩展,合称为 JCA 插件。扩展可以添加到任何符合 JCA 的现有资源适配器。一旦添加了扩展,您的资源适配器就与 Application Developer Integration Edition 开发工具兼容了。参考资料中的文章“Enabling a J2EE Resource Adapter”提供了关于这些扩展的更多信息。

图 1 显示了 Application Developer(基本版本)和 Application Developer Integration Edition 组件之间的关系。

图 1. Application Developer 和 Application Developer Integration Edition 之间的关系
Integration Edition 组件

在服务中集成 EIS 系统
通常,要集成 EIS 系统上的程序(您经常会在旧的应用程序中发现这种情况),您必须采取这些步骤:

  1. 导入程序源文件(例如,COBOL copybook)并生成描述程序输入和输出的元数据。所生成的 WSDL 代码是序列化的。
  2. 生成用于服务的基于 EJB 的部署代码,包括充当旧程序代理的代码。
  3. 创建 WSDL 服务定义,用于描述将要调用事务的服务。服务定义将让您从单元测试或生产环境调用部署的服务。
  4. 对该服务进行单元测试,然后将它部署到生产环境。

在下一节中,我们将用一个涉及 B2B 和企业集成的案例研究在这些方面上展开讨论。

案例研究:Travel Simplified
Travel Simplified 是一家虚构的旅行社,它希望为其客户开发一个网站。任何使用浏览器的因特网用户都可以访问该网站。该站点必须支持下列用例:

  • 用户进行登录并浏览站点上可用的服务。
  • 该站点根据用户提供的出发地和目的地以及起止时间生成旅游选项。
  • 用户预订飞机、汽车和火车票。
  • 用户通过提供信用卡号完成交易。

图 2 显示了 Travel Simplified 为了支持必需的用例所要访问和集成的服务(由其它组织提供的)和 EIS 系统的集合。

图 2. 要集成的 EIS 系统和服务的集合
包含旅游信息的服务和 EIS 系统

对于 Travel Simplified 网站的开发人员而言,主要的目标和挑战都是从用户角度创建无缝的视图。使用网站的客户不必知道服务从正在运行的不同 EIS 系统的其它组织获得数据。Web 服务提供了理想的和统一的 B2B 集成方案。

图 3 显示了 Travel Simplified 网站体系结构。

图 3. 站点体系结构:Travel Simplified
Travel Simplified 网站的站点体系结构

构建供应商:Simplified Airlines
在 Travel Simplified 能够向客户提供航班预订服务之前,必须有别的机构来提供这项服务。Simplified Airlines 是供应商之一,这是一家虚构的航空公司,它决定通过因特网向业务伙伴提供其预订系统。图 4 显示了 Simplified Airlines 网站体系结构。该公司的业务伙伴所编写的应用程序可以通过 SOAP 和 HTTP 协议访问 Simplified Airlines 服务。

图 4. 站点体系结构:Simplified Airlines
Simplified Airlines 网站的体系结构

Simplified Airlines IT 基础结构是围绕着在 CICS 下运行 COBOL 程序的大型机构建的。这些程序提供该公司需要让其业务伙伴使用的功能,如:

  • 通过预订号查找预订信息
  • 登记预订
  • 取消预订
  • 更改预订信息(日期、时间、航班号)

这些功能构成了 Simplified Airlines 服务接口的基础。在下面各节中,我们将侧重讨论如何集成单个功能 — 一个允许按预订标识进行预订查询的功能。合并其它功能的步骤与此相同。事务名是 RESBYID。我们将使用 CICS ECI 协议访问这个功能。我们还将确保可以使用 SOAP 协议通过因特网访问我们的新服务。

下列是我们使用 Application Developer Integration Edition 来构建和测试服务时采取的步骤。在我们逐步执行示例时将深入解释每个步骤:

创建 CICS ECI 服务
企业服务中的第一批任务包括定义服务。定义服务意味着为它创建一个项目并创建说明详细信息(如名称空间和端口类型(接口)名)的 WSDL 文件。您还需要确定连接工厂信息,因为要用它来建立 WSDL 服务和 CICS 服务器之间的连接。然后您通过在 CICS 服务器上导入包含输入或输出结构的 CICS COBOL 或 C 程序,在 WSDL 文件中填充操作。

创建服务项目
启动 Application Developer Integration Edition 将缺省地启动 Enterprise Services 透视图。透视图类似于参照框架。在服务导航中,显示了三个文件夹:

  • Service Projects — 您已创建的企业服务列表。
  • Deployed Services — 您已部署的服务列表。
  • Resource Adapters — 可以用来访问不同 EIS 的资源适配器列表。

要开始创建服务,启动 Service Project 向导并提供一个项目名称。一旦这个向导完成了,则启动 Service Providers Browser 工具(如下面的图 5 所示)。这个工具是服务创建任务的起点。例如,选择 CICS ECI 链接将导航到创建访问 CICS ECI 程序的服务的工具。

图 5. 创建服务项目并打开 Service Providers Browser
服务供应商可提供的服务项目

导入 COBOL 或 C 文件
当定义对 CICS ECI 程序的操作时,您导入 COBOL 或 C 文件来定义 WSDL 格式的输入和输出。在您设法定义操作之前,必须将 COBOL 或 C 文件从本地文件系统导入工作台。

Application Developer Integration Edition 使导入变得容易。选择您新创建的项目,然后单击 Application Developer Integration Edition 工具栏上的 Create a Java package 图标。一旦创建了包,就使用导入功能导入您的 COBOL 或 C 文件。在将您的 COBOL 文件导入到工作台之后,就可以开发服务定义了。

创建 CICS ECI 服务定义
创建 CICS ECI 服务定义是开发企业服务工作中的核心,Application Developer Integration Edition 拥有使该工作尽可能简单的工具。

您通过从服务供应程序列表中选择 CICS ECI 开始,如上面的图 5 所示。服务定义由 Application Developer Integration Edition 生成的 WSDL 文件描述。(有关 WSDL 的详细信息,请参阅参考资料中的 WSDL 规范。)简而言之,它用 XML 来定义服务。以 WSDL 格式创建的服务定义描述了与运行时实现无关的系统请求格式。服务定义描述了部署该服务的位置和对使用该服务的应用程序可用的操作。

选择 CICS ECI 作为服务供应程序将打开一个连接特性页面。输入特定 CICS 服务器的连接值,如图 6 所示。

图 6. CICS ECI 服务的连接特性
CICS ECI 服务的连接特性

选择 Add Service 将指导您填写 WSDL 必需的名称,如名称空间(它是唯一)、您的服务的逻辑名称空间和端口类型(它对相关操作进行分组)。名称空间用来生成 Java 包。例如,如果您指定的名称空间是 http://sample.ibm.com/,则所生成的代码的 Java 包的名称是反的:com.ibm.sample

使用工具会给您带来一些灵活性。例如,您可以选择使所生成的 XSD 模式内联 — 在所创建的 WSDL 文件中或与之分开。当使用 COBOL 或 C 导入工具时,类型的 XSD 模式总是内联的。图 7 显示带有文件夹和您的服务名称的页面。

图 7. 定义服务的名称空间和端口类型
定义服务的名称空间和端口类型

在完成 Add Service 功能之后,就创建了 WSDL 实现(服务)和接口文件。在 WSDL 编辑器的 Binding 页面上打开了实现 WSDL 文件。通常您可用端口类型将相关操作分组(例如,将所有用于执行查询和更新银行帐户的操作组合在一起)。在 Binding 页面,您可以定义自己想访问的每个 CICS ECI 程序的操作。您可以通过创建新操作来实现这一点(这样做会将操作的端口类型和消息、XSD 类型、以及与匹配的操作适合的绑定中的实现 WSDL、typeMap 和每种类型的编组信息填入接口 WSDL)。

当创建操作时,第一步是指定 ECI 操作绑定特性。这些特性映射到 ECI 交互规范(ECIInteractionSpec)的特性,并包含您的服务为了和 CICS 服务器交换输入和输出信息而需要知道的详细信息(声明函数名,它标识在 CICS 服务器上调用的 CICS 程序)。然后您需要以 WSDL 格式创建输入和输出消息,它们将映射到 CICS 程序的输入和输出操作。这些步骤的组合将创建我们用来调用 CICS 事务的方法。

在服务定义方面,Application Developer Integration Edition 有一个让您将 WSDL 操作与您先前导入的 COBOL 结构关联的工具。首先通过使用该工具来标识函数名开始,如图 8 所示。

图 8. 将特性与函数名绑定到一起
将特性与函数名绑定到一起

继续创建服务操作,为操作指定名称。名称通常反映函数的操作。我们使用 getReservationInfo 是因为希望用该函数来查询预订数据。您可以通过使用 Import 功能并选择您先前导入到工作台的文件来定义输入和输出消息;它包含函数的输入和输出类型。标识了 COBOL 或 C 文件之后,工具给您一个机会来指定任何特定于平台的特性(如代码页、浮点数格式、尾数法等),如图 9 所示。

图 9. 特定于平台的特性
特定于平台的特性

一旦指定了平台特性,就选择您的服务将从 COBOL 或 C 文件中使用的 COBOL Level 1 或 C 结构通信区域(commarea)。您的服务定义几乎已经完成了,但工具还是给了您几个选项。例如,您可以选择将输入消息也用作输出消息。在 CICS 程序可以返回不同输出数据的情况下,您可以为自己的操作创建多个可能的输出。

最后一步,该工具将操作、输入和输出消息以及类型填入实现和接口 WSDL 文件。Application Developer Integration Edition 以可视格式显示代码,如图 10 所示;您也可以用 WSDL 源代码的格式查看它。注:Application Developer Integration Edition 明显地(在您不经意间)为您处理了编组代码。在运行时,来自 CICS 服务器的数据将被放到适合在网络上传输的流中,必要时可以将它们分散。

图 10. 可视格式的服务定义
可视格式的服务定义

将服务部署到测试环境
部署有两个方面:将您的服务文件打包到企业压缩文档(EAR)文件中,然后将该 EAR 文件放到应用程序服务器上。通常把两个方面都称为部署到应用程序服务器。Application Developer Integration Edition 有简化部署的工具。您通过创建 Enterprise Application Project 开始部署,该项目定义了 EAR 文件的结构。您可以将部分已部署的代码放进 EJB 部分、部分放到 Web 部分、部分放到客户机代码部分。在大型 EAR 文件中,这种划分有助于您管理自己的文件。

一旦定义了您的 EAR 文件的结构,就选择先前创建的绑定文件,然后从工具栏上单击部署向导。当将您的文件打包成 EAR 时,Application Developer Integration Edition 提供您缺省情况下需要的大多数信息,但允许您在必要时覆盖它们。例如,因为我们也希望将 CICS 服务作为 SOAP 服务提供,所以选择 SOAP 作为入站绑定类型(如图 11 所示)。

图 11. 将服务文件映射成 EAR 结构
将服务文件映射成 EAR 结构

此时,您还需要指定 Java 命名和目录接口(Java Naming and Directory Interface (JNDI))名,在运行时,当应用程序服务器与 CICS 服务器建立连接时,需要知道它。还有,您可能想调整特定于 SOAP 的绑定特性。通常,会使用缺省值。

一旦以这种方式集成了所有功能,创建 Simplified Airlines 站点的工作就基本完成了。剩下的工作是将服务部署到测试或生产环境中。我们说测试环境是因为 Application Developer Integration Edition 提供了模拟应用程序服务器的完整测试环境。在部署到生产环境之前使用 WebSphere Test Environment 是个好主意。在测试之后,您将 EAR 文件放到生产环境。无论测试环境还是生产环境,您下一步都需要创建应用程序用来间接访问服务的代理。

将 Simplified Airlines 与 Travel Simplified 站点集成
现在,我们有了航班预订服务并需要将它集成到整体旅行社服务中;我们正在一个服务中创建另一个服务。我们创建代理来在客户机上表示服务器上的服务。

创建用于服务的 SOAP 代理
代理提供对感兴趣的服务的远程过程调用接口。应用程序调用代理上的本地方法。代理处理与服务器的通信。正如您可能猜到的,Application Developer Integration Edition 提供了为您构建代理的工具。要将 Simplified Airlines 服务集成到 Travel Simplified 站点中,您会需要获得定义该服务的接口和 SOAP 绑定信息的 WSDL 文件。您可以使用统一描述、发现和集成协议(Universal Description,Discovery and Integration (UDDI))注册中心完成该操作,这使得这些文件公开可用。也可以通过与感兴趣的组织建立直接联系来做到这一点。上述部署步骤在 Enterprise Application Project 的 Services_SOAP Web 项目中生成了 WSDL 文件。下一步只是运行代理向导。

类似于部署向导,代理向导为您完成了许多输入域,如图 12 所示。您可能要更改的域是 Destination folder,因为它决定了代理的位置。在本例中我们选择了 ClientSample 文件夹,因为该文件夹包含了调用该服务的客户机代码。

图 12. 指定代理信息
指定代理信息

代理信息的一个关键部分当然是您将在服务器上调用的操作。您的服务可能提供了很多操作;在代理中,您选择那些将要提供给应用程序访问的操作。如果您需要选择一个或多个操作,则需要使用“client stub”样式的代理,这是生成的首选样式。如果您需要访问绑定操作特性(如交互规范 (interactionSpec))则应选择 Command bean 样式,如图 13 所示。

图 13. 选择在代理中提供的操作
选择在代理中提供的操作

用客户机代码测试 Simplified Airlines 服务
此时您会编写一些客户机代码来调用 SOAP 代理并在 WebSphere Test Environment 上运行它。如下所示的代码,从 CICS 服务器检索了一个名称,然后将它输出到控制台(标准输出)。一开始先编写这样一个简单程序是个好主意,因为只想证实可以从服务器得到一些数据。如果您的应用程序不能使一个事务工作,那么更谈不上使数千个事务工作了。

调用 SOAP 代理的代码

package sample.cics;
public class TestCustomerSOAP {
   public static void main(String[] args){
        try {
         Customer record = new Customer();
         record.setCustomernumber("44444");
         CustomerInfoSOAPProxy proxy = new CustomerInfoSOAPProxy();
         proxy.setCustomerPart(record);
         proxy.execute();
         record = proxy.getCustomerPart();
         System.out.println(record.getCustomernumber());
         System.out.println(record.getFirstname());
         System.out.println(record.getLastname());
     } catch (Exception e) {
            e.printStackTrace();
     }   
  }
}

一旦您对代理方法调用返回正确的数据感到满意,就可以迅速将这个 bean 集成到应用程序的其余部分,在我们的示例中这些部分就是整个 Travel Simplified 网站。

结束语
在本文中,我们演示了如何将现有 CICS 程序迅速地集成到使用 Web 服务、SOAP 和 XML 的复杂 B2B 应用程序中。我们研究了 IBM WebSphere Studio Application Developer Integration Edition,这是一种专门为创建基于 Web 服务的、企业和 B2B 集成应用程序设计的产品。我们研究了其组件,然后研究了一个演示如何将 Application Developer Integration Edition 工具应用于实际 B2B 问题的案例研究。“老前辈”和“新新人类”一起很好地工作。

参考资料

关于作者
Gary Bist 是 IBM 多伦多实验室的专职技术作家。他写过许多关于将中间件软件与 Application Developer Integration Edition 及其前身 VisualAge for Java,企业版集成的产品文档和文章。他还是一位教育工作者,曾经开设并教授 Java 和关系数据库课程。他拥有西安大略大学(University of Western Ontario)英语硕士学位。可通过
bist@ca.ibm.com 与 Gary 联系。


Mikhail Genkin 是 IBM 多伦多软件开发实验室(Toronto Software Development Lab)IBM WebSphere System House 组的技术解决方案设计师。他的工作包括对 IBM 及其竞争对手的用于 Java 和基于 Web 服务企业访问的工具进行专家评审。他向几个构建用于 J2EE、Web 服务、RDBMS 和 EIS 访问的 WebSphere 工具的 IBM 开发团队提供关于其产品的可用性、性能和互操作性方面的建议。他对 VisualAge for Java,企业版、WebSphere Studio Application Developer 和 WebSphere Studio Application Developer Integration Edition 等几个发行版都作出了贡献。Mikhail 拥有加拿大渥太华的 Carleton 大学地球物理学学士学位以及渥太华大学(University of Ottawa)地球科学硕士学位。他是 Sun 认证 Java 程序员以及 IBM 认证 IBM Visual Age for Java 开发人员助理(Developer Associate)。可通过 genkin@ca.ibm.com 与 Mikhail 联系。


John Green 是 IBM 多伦多实验室从事连接器体系结构和工具方面工作的顾问组成员(Advisory Staff Member)。他是 J2EE 连接器体系结构和访问旧企业信息系统的专家。John Green 于 1987 年加入 IBM,在从事用来从 Java 访问企业应用程序的工具和库研究之前,他从事了几个其它项目。他对 VisualAge for Java Enterprise Access Builder 的几个发行版作出了贡献。最近,他成为 WebSphere Studio Application Developer Integration Edition J2EE 连接器工具组件的技术领导。他于 1987 年在位于金斯顿(Kingston)的女王大学(Queen's University)获得计算机科学学士学位。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页