正 文

理解 Web 服务的开发模式


www.7dspace.com  更新日期:2006-1-14 6:10:30  七度空间


  Web服务已经成为一种实现面向服务的体系结构的标准方法。尽管开发人员已经使用了许多模式来开发这样的 Web 服务,但这些模式目前尚未被明确地定义或讨论。本文不仅描述了各种 Web 服务的开发模式,并且还根据现有的工具支持和研究成果对各种模式的优缺点进行了讨论。本文对各种模式的分析基于在开发客户解决方案的过程中所积累的实际经验。

  Web 服务提供了一种标准方法来实现可以远程调用的业务功能。它们将访问机制从实现中分离出来,从而可以支持互操作性。因此,Web 服务是实现 SOA(要求请求程序和提供程序之间进行松散耦合)的事实标准。工具开发行业也迅速地融入到 Web 服务的浪潮中,并为 Web 服务的开发提供了多种机制。这些机制现在已经形成了一套 Web 服务的开发模式,其中每一种模式都有自己的优缺点,这些优缺点是我们在特定情况下确定应该使用哪种模式的依据。

  本文假定您基本熟悉 Web 服务的概念和标准。本文所使用的 Web 服务实现平台是 Java™,同时本文还假定您熟悉使用 Java 语言的 Web 服务,即 JAX-RPC,这是 Java Community Process 制定的两个规范。JAX-RPC 为 Java 2 Enterprise Edition (J2EE) 平台中的可部署、可执行 Web 服务定义了部署时构件和运行时构件。这些构件的例子包括:Web 服务描述语言(Web Services Definition Language,WSDL)文档和用于协助部署的 webservices.xml 文件。虽然内容比较简单,但 JAX-RPC 还是定义了一套请求程序端构件,其中包括一个用于定义客户端行为的 webservicesclient.xml 文件。尽管本文重点讨论的是 Java 平台,但文中描述的各种模式同样适用于任何一个支持 Web 服务开发的平台,例如 .NET。

  SOA 的主要原则之一是发布、查找和绑定。该原则认为任何 Web 服务开发的关键之处在于 WSDL 文档,该文档定义了相应的 Web 服务实现的接口和绑定。WSDL 文档定义了 Web 服务请求程序和提供程序间的契约,以便两者的实现细节(甚至实现平台)可以各不相同,其中一方发生改变不会对另一方产生任何影响。

  WSDL 文档有几方面与本文所讨论的内容有关。其中关系最大的是 types 和 portType 元素。types 元素为接口中所使用的数据类型定义了 XML 模式;这些类型可以显式定义在 WSDL 文档中,也可以从其他 XML 模式文件导入。portType 元素通过一组 operation 元素来标识 Web 服务所提供的操作集。每个 operation 元素依次引用(间接地通过 message 元素)定义在 types 元素中用作输入和输出参数的数据类型。

  由于 WSDL 文档是如此的重要,因此本文将围绕如何创建和操作 WSDL 文档来描述 Web 服务的开发模式。在创建了 WSDL 文档后,您可以使用 Web 服务开发工具来帮助自己生成由 JAX-RPC 定义的必要部署时构件和运行时构件。请记住,WSDL 文档是 Web 服务开发的关键所在——本文认为 WSDL 文档位于开发的顶层,因为它是一种使用抽象的、独立于实现的术语来描述接口的元语言;认为代码位于开发的底层,因为通常可以生成、部署和执行代码。根据 WSDL 的术语,本文确定并描述了三种开发模式:

  “自底向上”模式:从 Java 代码开始生成 WSDL 文档。

  “自顶向下”模式:从 WSDL 文档开始生成 Java 代码。

  “往返”模式:从 WSDL 文档开始生成 Java 代码,接着使用生成的 Java 代码来生成 WSDL 文档,然后使用生成的 WSDL 文档来生成 Java 代码。

  这些模式将在下面的部分中进行描述,其中包括了每种模式的优缺点。这些优缺点来源于在开发实际客户解决方案(包括业务集成和业务现代化)的过程中所积累的经验。

  自底向上开发

  面向 Java 的第一代 Web 服务工具的目标是:将现有的代码作为 Web 服务公开。该方法之所以称为“自底向上”,是因为它的起点是代码——这些代码被抽象成接口定义,并随后作为实现该接口的 Web 服务公开。这种模式已为许多 Web 服务方面的专业人员所熟知,即使最新的一代 Web 服务工具也都很好地支持这种模式。自底向上的开发模式包括以下步骤,如图 1 所示:

  标识或创建 JavaBean 来代表服务接口输入和输出参数的数据类型。这些 JavaBean 可以是现有的 JavaBean,也可以是新建的 JavaBean。因为这些 JavaBean 常常用于在服务之间传输数据,所以有时也称其为数据传输对象(Data Transfer Object,DTO)。请注意,只有遵循 JavaBean 模式(例如,属性具有 getter 方法和 setter 方法)的属性才能在 Web 服务接口中公开。您可以使用标准 Java 开发工具来创建或修改所需的 JavaBean。

  清单 1. 示例 DTO

package com.hello.dto;

public class HelloWorldData {
 private String value;

 public String getValue() {
  return value;
 }

 public void setValue(String string) {
  value = string;
 }
}

  标识或创建一个能够成为 Web 服务实现的 Java 类——无格式普通 Java 对象(Plain Old Java Object,POJO)或无状态会话 EJB。该 Java 类必须包括 Web 服务接口所公开的方法。这些方法必须使用步骤 1 中的 DTO 作为输入和输出参数。请注意,必须将实现 Web 服务中所公开的业务逻辑的方法标记为 public。此外,必要时您可以使用标准 Java 开发工具来创建或修改该 Java 类。该类不必遵循某些适用于 JavaBean 的规则。必要时该类可以在公开的方法中抛出任何异常。

  清单 2. 示例 POJO 实现

package com.hello;

import com.hello.dto.*;
import com.hello.dto.*;

public class HelloWorld {

 public String doIt(HelloWorldData input)
 {
  String retVal = null;
  if (input != null)
  {
   retVal = input.getValue();
   System.out.println("Input value: " + retVal);
  }
  return retVal;
 }
}

5页,页码:[1] [2] [3] [4] [5] 

上一篇:轻松玩转Win2003的DHCP服务器
下一篇:试用Win2003 x64版:挑战Unix与Linux
标题:理解 Web 服务的开发模式 作者:Greg Flurry,Manish Modh 来源:developerWorks 中国
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐