程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在Apache Geronimo中部署Web服務

在Apache Geronimo中部署Web服務

編輯:關於JAVA

要確定某個應用服務器是否支持 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-2
set 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

<?xml version="1.0" encoding="ISO-8859-1" ? > 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_3.xsd" 
   version="2.3"> 
 
 <display-name>Amazon  Sample</display-name> 
 <welcome-file-list> 
   <welcome-file>t;searchAmazon.jsp</welcome-file> 
 </welcome-file-list> 
</web-app> 

Geronimo 需要一個 geronimo-jetty.xml 描述符。該代碼如 清單 5 所示。

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

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
xmlns="http://geronimo.apache.org/xml/ns/web/jetty"
xmlns:naming="http://geronimo.apache.org/xml/ns/naming"
configId="amazonclient"
parentId="amazonClient">
   <context-root>/amazonclient</context-root>
   <context-priority-classloader>true</context-priority- classloader>
</web-app>

現在,您可將這個文件保存為 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 應用服務器做好了准備。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved