在ApacheGeronimo中部署Web服务

要确定某个应用服务器是否支持 Web 服务开发工作吗?Apache Geronimo 应 用服务器完全可以满足这一要求,它是 Apache Software Foundation 的最新项 目之一。Java™ 专家 Kunal Mittal 将通过演示如何在 Geronimo 中编写 和开发标准 J2EE Web 服务代码,向您介绍 Geronimo 的 Web 服务功能。您将学 会如何根据底层简单对象访问协议(SOAP)实现使用 Apache Axis,从而使用 Amazon Web 服务,并且还将知道如何使用简单的、基于 JavaServer 页面的客户 机来访问 Web 服务。

Geronimo 支持 Web 服务标准

全新的 Apache Geronimo 项目是以一流 的 J2EE 1.4 标准为基础而构建的功能强大的开源 J2EE 应用服务器。它使用各 种开源实现,并且很快将与 J2EE 兼容。有趣的是,Geronimo 构建在从许多其他 开源项目收集的代码集合基础之上。Geronimo 使用 Apache Axis 和 Apache Scout支持以下 Web 服务标准:

Java Specification Request(JSR)109 (实现 Enterprise Web Services 1.1)

Java API for XML-based Remote Procedure Call (AX-RPC)

SOAP with Attachments API for Java (SAAJ)1.2

Java API for XML Registries(JAXR)1.0

当 确定一台应用服务器来支持 Web 服务开发工作时,只有满足上述标准才能使 Geronimo 成为一种可行的方法。如果使用构成 Geronimo 的开源项目,则自然会 将 Geronimo 转换为您的部署容器。要使 Geronimo 上的 J2EE 应用程序的开发 和部署变得更容易,还要提供多个 Eclipse 插件。

以 Amazon Web 服务(AWS)为例,学习如何使用 Web 服务和 Geronimo。从 介绍使用用于 AWS 的 Web 服务描述语言(WSDL)和使用 Apache Axis 构建消费 者代码开始,您将得到全程指导。了解使用 Web 服务的简单 Java 类,并学习如 何从 JSP 文件调用这个类来显示 Web 服务的结果。最后,将这些代码绑定成 J2EE WAR 文件,并将其部署在 Geronimo 上。

使用 Amazon Web 服务

要使用 AWS,需要将 Apache Axis 用作 SOAP 实现来构建服务消费者 (service consumer)。(Axis 是 Geronimo 支持的底层 SOAP 实现)。如果过 去进行过这些操作并拥有此代码,那么可以跳过这一步骤。

撰写此文时,Geronimo 还不是一个产品级可用应用服务器,但是它将通过 J2EE 认证。在发布 Geronimo 时,它将是经认证的 J2EE 1.4。

生成 AWS 代码的要求

首先从设置环境开始。要生成 AWS 消费者代码,需要满足以下 4 项要求:

Java 软件开发工具包(JDK)1.4.2 或更新版本。

Apache Axis 1.1 或更新版本。

用于 Web 服务的 Web 服务描述语言(WSDL)。

来自 AmazonAn 的一个 AWS 订阅 ID,这样,就可以使用其 Web 服务。

设置环境

下载上面所列出的元素之后,接下来的一系列步骤将全程指导您设置环境,具 体方法如下:

将 JDK 安装到 C:/jdk_142_05。将 JAVA_HOME 设置到此目录。

将 Apache Axis 解压缩到 C:/axis1-2,并将 AXIS_HOME 定义为此目录。

将 WSDL 文件复制到 AXIS_HOME 目录。

注册 AWS 订阅 ID。

基本环境准备好之后,就可以开始生成代码来使用 Web 服务了。

从 WSDL 生成 Java 代码

首先,从 WSDL 文件生成可以使用 Web 服务的 Java 代码。Apache Axis 附 带一个称为 WSDL2Java 的实用工具,该工具可以执行此任务。要运行此工具,请 确保类路径中存在以下 Java 存档(Java Archive,JAR)文件。清单 1 中所示 的示例 setenv.bat 脚本可以做到这一点。

清单 1. Setenv.bat

set AXIS_HOME=c:/axis-1-2set CLASSPATH=.set CLASSPATH=%AXIS_HOME%/lib/axis.jar;%CLASSPATH%set CLASSPATH=%AXIS_HOME%/lib/commons-discovery.jar;%CLASSPATH%set CLASSPATH=%AXIS_HOME%/lib/commons-logging.jar;%CLASSPATH%set CLASSPATH=%AXIS_HOME%/lib/jaxrpc.jar;%CLASSPATH%set CLASSPATH=%AXIS_HOME%/lib/saaj.jar;%CLASSPATH%set CLASSPATH=%AXIS_HOME%/lib/log4j-1.2.8.jar;%CLASSPATH%set CLASSPATH=%AXIS_HOME%/lib/wsdl4j.jar;%CLASSPATH%

现在,可以从 AXIS_HOME 目录运行以下命令来生成 Java 代码:

java org.apache.axis.wsdl.WSDL2Java AWSECommerceService.wsdl

这此过程中,花费了几秒钟的时间在 AXIS_HOME 下创建一个称为 com 的目录 。现在,可以开始创建一个 Web 存档(Web Archive,WAR)文件。该文件最后将 部署在 Geronimo 上。

创建一个称为 C:/amazon-client 的目录。您将使用此目录存储 WAR 文件的 代码。可以在此目录下创建一个称为 WEB-INF 的目录和一个称为 src 的目录。 将 com 目录从 AXIS_HOME 复制到 C:/amazon-client/WEB-INF/src 中。

此代码是使用 Web 服务的基本代码。目前,您无需探究此代码的详细信息。

编写代码来使用 Web 服务

接下来便是编写连接 Web 服务的客户机。在此示例中,您将编写一个简单的 Java 类,该类可以调用通过 WSDL2Java 生成的适当类(像 Eclipse 和 IBM® Rational® Application Developer 这类的开发工具可以自动生成 此代码的简写版。这样,就无需在编写此代码的细节上花费太多的时间)。

为简单起见,我们在同一软件包的结构中创建了一个称为 AmazonClient 的类,该结构由 WSDL2Java(com.amazon.xml.AWSECommerceServer)生成。此类 的代码如 清单 2 所示。这个类公开了称为 lookupISBN 的单一方法。顾名思义 ,此方法会调用 AWS,并将传进的 ISBN 号所代表的图书信息返回。

清单 2. AmazonClient.java

package  com.amazon.xml.AWSECommerceServer; import java.lang.*; import java.util.*; public class AmazonClient {    public AmazonClient() {  }  public Items[] lookupISBN (String isbn) throws Exception {     try {        System.out.println("Given ISBN is " + isbn);        AWSECommerceServiceLocaTor locaTor =            new AWSECommerceServiceLocaTor();        AWSECommerceServicePortType type =            locaTor.getAWSECommerceServicePort();       String  itemId[] = {isbn.trim()};       ItemLookup lookup =  new ItemLookup();       lookup.setAssociateTag("MY ID");   // fill in your own      lookup.setSubscriptionId ("MY ID"); // fill in your own      ItemLookupRequest  lookupReq = new ItemLookupRequest();        lookupReq.setMerchantId("All");       lookupReq.setItemId (itemId);       lookupReq.setResponseGroup(new String[]        {"Medium", "OfferFull", "Variations", "Images"});        ItemLookupRequest[] requests =  lookup.getRequest();       requests = new  ItemLookupRequest[1];       requests[0] = lookupReq;        lookup.setRequest(requests);        ItemLookupResponse response =             type.itemLookup(lookup);       Items[] items =  response.getItems();       if (items != null  && items.length > 0) {          System.out.println("Number of results "+ items.length);          return items;       }    } catch  (javax.xml.rpc.ServiceException se) {       throw new  Exception(se.getMessage());     }    return new  Items[0];   }}

必须向 Amazon 注册,以获得订阅 ID(请参阅上面的 使用 Amazon Web 服务 )。获得订阅 ID 之后,可以用它替换 清单 2 代码中的 ID。

现在,您 已经为编译此代码做好了准备。运行 setenv.bat 文件之后,通过运行 javac *.java: ,应该能够轻松地编译此代码。在这个目录中,可以获得多个类文件。 为使包装更简洁,可以将整个 src 目录复制到一个称为 WEB-INF/classes 的新 目录中,然后,从 WEB-INF/classes 删除所有 Java 源文件;从 WEB-INF/src 删除所有类文件。如果使用的是集成开发环境(IDE)(例如 Eclipse),则许多 这类手动操作都可自动完成。

现在,可以调用 Web 服务并查看结果。使 用 JSP 文件可以做到这一点。

编写 JSP 文件以便从 Web 服务显示结果

在 amazonclient 目录下,创建一个称为 searchAmazon.jsp 的 JSP 文 件。该代码如 清单 3 所示。

在清单 3 所示的 JSP 文件中,将调用您定 义的 AmazonClient 类并接收一个 Item 对象数组。然后在这个数组上进行迭代 便可以显示这些值。

这里不是为了演示一个优秀的 J2EE 编码做法,而是 示范正在编写的所有代码都是标准的 J2EE 代码,这些代码可以很容易地部署到 IBM WebSphere®、平台、 Apache Tomcat、Apache Geronimo、JBoss 或 BEA WebLogic 上。

现在您已具备所需的所有代码。

部署代码之前的最 后步骤

最后一个步骤是设置部署描述符,以便在 Geronimo 上部署 WAR 文件。在 WEB-INF 目录下,创建两个简单的 XML 部署描述符。第一个是标准的 J2EE WAR 部署描述符,称为 web.xml (请参见清单 4)。

清单 4. web.xml

    Amazon  Sample      t;searchAmazon.jsp    

Geronimo 需要一个 geronimo-jetty.xml 描述符。该代码如 清单 5 所示。

清单 5. geronimo-jetty.xml 描述符

   /amazonclient   true

现在,您可将这个文件保存为 WAR 文件,并命名为 amazon.war。为此,请从 amazonclient 目录运行以下命令:

jar cf amazon.war

现在,您已经为在 Geronimo 上部署此代码做好了准备。

在 Geronimo 上部署消费者代码

构建标准 J2EE WAR 文件之后,就可以方便地在您所选择的任何应用服务器( 或 servlet 引擎)上部署这个 WAR 文件。下面的部分将介绍如何在 Geronimo 上部署这个代码。

安装 Geronimo

首先下载并安装 Geronimo。下载 Geronimo 1.0 M3 安装程序。要运行这个安 装程序,请使用以下命令:

java -jar geronimo-1.0-M3-installer.jar 

按照步骤操作,将 Geronimo 安装到 GERONIMO_HOME,并将它定义为 C:/geronimo。

启动 Geronimo

要启动服务器,请从 GERONIMO_HOME 目录运行以下命令:

java -jar bin/server.jar

部署 Amazon.war 文件

您应当在类路径中的 setenv 批处理文件中定义所有的 JAR 文件。将这些文 件从 AXIS_HOME/lib 复制到 GERONIMO_HOME/lib 中。这些 JAR 文件大多数已经 存在于 GERONIMO_HOME/lib 中。请不要覆盖这些已存在的文件,即使您正在复制 的文件是同一文件的更新版本。当提示是否替换现有文件时,请单击 No。

要在应用服务器上部署 amazon.war 文件,请将 WAR 文件复制到 GERONIMO_HOME 中,并从此目录运行以下命令:

java -jar bin/deployer.jar deploy amazon.war

运行 searchAmazon.jsp

剩下的最后一项任务是运行所编写的 JSP 文件。请打开浏览器,并在地址栏 中键入 http://localhost:8080/amazon/searchAmazon.jsp。

图 1 显示了该结果。您可以修改这个 JSP 文件,以包含一个表单字段,在该 字段中输入 ISBN 编号并获得结果。

图 1. 执行 searchAmazon.jsp

现在您已经成功地在 Geronimo 中部署了第一个 Web 服务消费者。

标准 J2EE Web 服务

本文中的例子是非常简单的,但是它表明 Geronimo 支持标准 J2EE Web 服务 。作为使用 Web 服务的练习,您可以尝试使用 AWS 提供的其他选项。例如,将 ISBN 搜索更改为标题搜索或作者搜索。然后,可以从 Web 服务结果中了解如何 显示链接到 Amazon.com 的 URL 和该书的映像。

另一个有趣的练习是通过其他 J2EE 技术和 Apache Axis 来使用 Web 服务, 然后将它们部署到 Geronimo 中。例如,将 AmazonClient.java Plain Old Java Object (POJO) 替换成无状态会话 Enterprise JavaBean (EJB) 组件,然后,将 它部署到 Geronimo 中。

可以以 webMethods 或 Google Web 服务的任何 Web 服务作为例子。如果应 用本文介绍的相同步骤,则可以快速地将一个服务消费者部署到 Geronimo 的这 些 Web 服务中。

结束语

现在您已经认识了 Geronimo,并了解了它的 Web 服务功能,应该已经在 Web 服务开发工作中为开始使用 Geronimo 应用服务器做好了准备。

到一个新的环境去欣赏去看去听,

在ApacheGeronimo中部署Web服务

相关文章:

你感兴趣的文章:

标签云: