Web服務繼續從開發者那裡得到動力。從2002年9月web服務概念首次引入時笨拙的定義 開始,現在已經發展到在2002年3月JavaOne上有63個會議是完全關於該主題的。(會議 幻燈片鏈接,見更多信息)。所以,隨著Java 2 平台上開發Web服務關鍵軟件包的更新 ,我們決定更新Java 2 平台企業版(J2EE)上部署Web服務的基本指南。 J2EE的靈活性和可伸縮性使得它成為構建多層企業級應用的一個可選擇平台。在J2EE平 台上部署Web服務是一個很自然的擴展。Java Web Services Developer Pack(Java WS DP或JWSDP)是一個一體化的下載包,它包含了簡化Java平台上構建Web服務的關鍵技術 。JWSDP是Sun和Java社團的其他成員共同開發的工具和API包。它可以幫助你迅速快捷地 開發Web服務。 你可以在J2EE上運行Java WSDP構件或者將構件與J2EE集成。本文先簡略地介紹Web服務 ,然後說明如何: 建立開發Web服務(JWSDP EA2)的J2EE 1.3.1環境 根據Sun Quality Expectations(SQE)組的指南將Web服務與J2EE集成 根據SQE組的指南在J2EE上部署web服務示例。 在J2EE上運行web服務 這些指南覆蓋了UNIX和Windows。一般的指導適合於Windows平台上的開發者,對於UNIX 上的例外使用UNIX前綴進行標識。屏幕畫面是Windows平台的,但是因為JWSDP使用Swin g,所以UNIX開發者也應該可以看到同樣的畫面。 注意:該指南是為JWSDP EA2編寫的。如果你一直使用JWSDP EA1,那麼下載EA2,它在幾 個方面都有改進。 Web服務介紹 Web服務是確定從任何連接Internet的具有web服務能力的機器提供的服務。Web服務通過 一組基於XML的開放標准使得互操作性成為可能。商業上使用基於XML的Web服務描述語言 (Web Services Description Language,WSDL)描述它們的Web服務,並用一種基於XM L的注冊方式,如統一描述、發現和集成(Universal Description, Discovery and In tegration,UDDI)協議,將它們列出來。 UDDI允許你查找公開的可訪問的web服務,如 圖1所示。客戶向目錄發送一個服務請求,目錄通知客戶符合請求條件的已注冊服務。然 後使用SOAP,一種利用HTTP和XML作為交換機制的協議,在不同平台的應用程序之間進行 通信。 圖1 Web服務協議 如果想了解更多的有關web服務的背景知識,可以參考更多信息中的介紹性資料。 下載和安裝J2EE和JWSDP 如果還沒有下載和安裝J2EE SDK1.3.1和JWSDP EA2,則下載並安裝該指南所介紹的J2EE SDK1.3.1和JWSDP EA2。安裝是自解壓的(兩個包都含有安裝和配置手冊),最主要的 配置步驟是要確保環境變量J2EE_HOME和JWSDP_HOME指向正確的安裝路徑,因為許多其他 的環境變量都依賴她們的配置。 JWSDP和J2EE集成 集成過程包括兩項主要任務:將JWSDP相關的JAR文件添加到J2EE中,然後進行一些端口 配置並設置安全權限。 注意:如果安裝了Ant build工具,則可以運行腳本:%JWSDP_HOME%\bin\jw2sdponj2ee .bat (UNIX:$JWSDP_HOME/bin/jw2sdponj2ee.sh)。這些腳本使用一個安裝JWSDP的b in目錄下的Ant build文件(jwsdponj2ee.xml)。如果讓Ant執行配置過程,可以跳到下 一節了解如何在J2EE平台上打包和部署web服務。如果想了解內部機制,可以按照這裡給 出的指南手工進行配置。關於Ant腳本的更多信息,請參看:%JWSDP_HOME%\docs\jwsdp onj2ee.html($JWSDP_HOME/docs/jwsdponJ2EE.html)。 為了添加必要的JWSDP相關JAR文件,首先使用幾個JWSDP JAR文件建立兩個主要的JAR文 件(jwsdp-common.jar和jwsdp-endorsed.jar),然後將這兩個新的JAR文件拷貝到正確 位置並進行一些配置。 建立jwsdp-common.jar文件 1、 建立一個臨時目錄(例如:%JWSDP_HOME%\work\jwsdp_jars)。(UNIX:$JWSDP_H OME/work/jwsdp_jars) 2、 將下列JAR文件從%JWSDP_HOME%\common\lib拷貝到%JWSDP_HOME%\work\jwsdp_jars 。%JWSDP_HOME%環境變量定義了安裝JWSDP的絕對路徑。例如,在我的Windows機器上, 它是c:\jwsdp。(UNIX:從$JWSDP_HOME/common/lib拷貝到$JWSDP_HOME/work/jwsdp_j ars。$JWSDP_HOME環境變量定義了安裝JWSDP的home目錄) mail.jar 該JAR文件包含JavaMail API和所有的服務提供者(service provider)。 activation.jar 該JAR文件包含了組成JavaBeans Activiation Framwork(JAF)的類。 dom4j.jar dom4j.jar是一個針對Java的開放源代碼XML框架。它允許讀、寫、定位、新 建和修改XML文檔。它與DOM和SAX集成並與完全Xpath支持無縫集成。dom4j.jar文件包含 所有dom4j代碼和Xpath引擎,但沒有SAX和DOM接口。如果你使用JAXP和crimson.jar或x erces.jar的話,就要使用該JAR文件。 jaxrpc-api.jar和jaxrpc-ri.jar 這兩個JAR文件包含JAX-RPC API和基於XML遠程過程調 用(Remote Procedure Call,RPC)Java API的參考實現,它們使得Java開發者可以根 據簡單對象訪問協議(SOAP)規范構建基於XML RPC功能的web應用程序和web服務。 jaxm-api.jar和jaxm-clIEnt.jar 這兩個JAR文件包含支持XML 消息傳輸的Java API參考 實現 。JAXM是一個發送和接受SOAP消息的基於XML的消息傳輸系統。 jaxr-api.jar和jaxr-ri.jar 這兩個JAR文件包含了JAXR或者說支持XML注冊的Java API 參考實現。JAXR提供了訪問不同類型XML注冊的統一標准。它包括JAXR信息模型和ebXml 注冊及UDDI注冊規范之間的詳細綁定。 jaxp-api.jar JAXP是支持XML處理的Java API。它支持利用DOM、SAX和XSLT處理XML文檔 。 castor-0.9.3.9-xml.jar Castor是一個XML數據綁定框架。不像處理XML文檔結構的DOM 和SAX,Castor可以通過代表數據的對象模型處理定義在XML文檔中的數據。Castor可以 從XML建立幾乎所有的如bean的Java對象,或相反。 commons-logging.jar 該JAR文件包含了一個日志記錄庫包 fscontext.jar和providerutil.jar 這兩個JAR文件包含文件系統服務provider。 3、 將下列JAR文件從%JWSDP_HOME%\tools\jstl拷貝到%JWSDP_HOME%\work\jwsdp_jar( UNIX:從$JWSDP_HOME/tools/jstl拷貝到$JWSDP_HOME/work/jwsdp_jar)。 JStl.jar standard.jar 這兩個JAR文件提供了JSP標准標簽庫的實現。 4、 將provider.jar從%JWSDP_HOME%\services\jaxm-provider\WEB-INF\lib拷貝到%JW SDP_HOME%\work\jwsdp._jars(UNIX:從$JWSDP_HOME/services/jaxm-provider/WEB-I NF\lib拷貝到$JWSDP_HOME/work/jwsdp._jars)。 provider.jar是一個JAXM provider,JAXM provider是路由和傳輸消息的消息傳輸服務 。它所做的一切對用戶都是透明的。只有當應用程序異步(或單向)通信時才需要JAXM provider。 5、 將目錄改變為從%JWSDP_HOME%\work\jwsdp_jars(UNIX:$JWSDP_HOME/work/jwsdp _jars)。 6、 利用目錄%JWSDP_HOME%\work\jwsdp_jars(UNIX:$JWSDP_HOME/work/jwsdp_jars) 下的文件建立jwsdp-common.jar。如下: jar -cvf %JWSDP_HOME%\work\jwsdp-common.jar . 注意命令末尾的點。 (UNIX:jar -cvf $JWSDP_HOME/work/jwsdp-common.jars . 注意命令末尾的點。) 現在%JWSDP_HOME%\work下就有了一個jwsdp-common.jar(UNIX:$JWSDP_HOME/work)。 建立jwsdp-endorsed.jar文件 1、 建立一個臨時目錄(例如:%JWSDP_HOME%\work\endorsed_jars)。(UNIX:$JWSD P_HOME%/work/endorsed_jars) 2、 將下列JAR文件從%JWSDP_HOME%\common\endorsed拷貝到%JWSDP_HOME%\work\endor sed_jars。(UNIX:從%JWSDP_HOME%/common/endorsed拷貝到$JWSDP_HOME%/work/endo rsed_jars。) sax.jar SAX是支持XML的簡單API(Simple API for XML)。該JAR文件包含SAX的實現。 dom.jar DOM是文檔對象模型。該文件包含DOM的實現。 xercesImpl.jar 該JAR文件包含所有實現解析器支持的標准API的解析器類。 xalan.jar 該JAR文件包含XSLT樣式表處理器。它實現了XSLT和Xpath。 xsltc.jar 該JAR文件提供了一個XSLT樣式表的編譯器和運行時處理器。 3、 將目錄改變到%JWSDP_HOME%\work\endorsed_jars(UNIX:$JWSDP_HOME%/work/end orsed_jars)。 4、 利用目錄%JWSDP_HOME%\work\endorsed_jars 下的JAR文件建立jwsdp-endorsed.ja r(UNIX:$JWSDP_HOME%/work/endorsed_jars),如下: jar -cvf %JWSDP_HOME%\work\jwsdp-endorsed.jar . 注意命令末尾的點。 (UNIX:jar -cvf $JWSDP_HOME%/work/jwsdp-endorsed.jar .) 現在%JWSDP_HOME%\work目錄下就有了一個jwsdp-endorsed.jar文件(UNIX:$JWSDP_HO ME%/work) 將JAR文件拷貝到正確位置並設置類路徑: 1、 在%J2EE_HOME%\lib\system目錄下建立一個名為endorsed的目錄(UNIX:$J2EE_HO ME/lib/system)。這個在J2SDK1.4中引入的系統屬性指定了Java運行時系統查找JAR文 件的目錄。 2、 將jwsdp-endorsed.jar從%JWSDP_HOME%\work拷貝到%J2EE_HOME%\lib\system\endo rsed(UNIX:$J2EE_HOME/lib/system/endorsed) 3、 打開J2EE環境配置腳本文件%J2EE_HOME%\lib\setenv.bat(UNIX:$J2EE_HOME/lib /setevn.sh),在這裡設置J2EE環境變量,將jwsdp-endorsed.jar插入CPATH的開始位置 : set CAPTH= %SYSTEM_LIB_DIR%\endorsed\jwsdp-endorsed.jar;%CLOUDJARS%;%CLASSES DIR% CPATH的其他部分應該保持不變。在UNIX下:CPATH=$SYSTEM_LIB_DIR/endorsed/jwsdp- endorsed.jar 等等。 4、 打開用戶配置腳本文件 %J2EE_HOME%\bin\userconfig.bat(UNIX:$J2EE_HOME/bi n/userconfig.sh)並將jwsdp-common.jar通過下列操作添加到J2EE_CLASSPATH中: 通過去掉J2EE_CLASSPATH前面的rem使J2EE_CLASSPATH生效。 在J2EE_CLASSPATH前新增加定義SYSTEM_LIB_DIR的一行,如下: set SYSTEM_LIB_DIR= %J2EE_HOME%\lib\system (UNIX: SYSTEM_LIB_DIR=$J2EE_HOME/lib/system) 設置J2EE_CLASSPATH如下: set J2EE_CLASSPATH=%SYSTEM_LIB_DIR%\jwsdp-common.jar (UNIX: J2EE_CLASSPATH=$ SYSTEM_LIB_DIR/jwsdp-common.jar) 5、 打開J2EE服務器腳本文件%J2EE_HOME%\bin\j2ee.bat(UNIX: $J2EE_HOME/bin/j2e e.sh),在文件的最後一行找到the %JAVA_COMMAND% (UNIX: JAVACMD),然後指定系統 屬性java.endorsed.dirs如下: %JAVA_COMMAND%-Djava.endorsed.dirs=%J2EE_HOME%\lib\system\endorsed (其余行保 持不變) -classpath %CPATH% com.sun.enterprise.server.J2EEServer and so on) (UNIX: $JAVACMD -Djava.endorsed.dirs=$J2EE_HOME/lib/system/endorsed 等等) 注意:系統屬性java.endorsed.dirs指定了Java運行時環境查找JAR文件的一個或多個目 錄。只有當在J2SDK1.4上運行J2EE SDK1.3.x時才設置該系統屬性。 配置web服務器端口和設置安全權限 1、 打開文件%J2EE_HOME%\config\web.propertIEs (UNIX: $J2EE_HOME/config/web. propertIEs)將http.port號碼從8000改成8080,因為JWSDP使用的Tomcat web服務器缺 省情況下使用8080端口,一些JWSDP示例程序也使用這個端口。web.propertIEs文件用來 設置web屬性(如端口號、Html根目錄、日志文件等等)。因此http.port=8080是HTTP服 務用來服務請求的端口。 2、 打開文件%J2EE_HOME%\lib\security\server.policy (UNIX: $J2EE_HOME/lib/sec urity/server.policy),然後在文件的末尾缺省域中指定下列權限: permission Java.io.FilePermission "", "read,write,delete"; permission java.util.PropertyPermission "*", "read,write"; permission java.lang.RuntimePermission "modifyThreadGroup"; server.policy是J2EE服務器的Java 安全策略文件。它包含J2EE引擎的Java 安全策略設 置和授權給一個程序特定訪問的權限。 添加到安全策略文件中的第一行授權在所有文件上有讀、寫和刪除的權限。第二行允許 讀和寫任何系統屬性。讀權限允許調用System.getProperty。寫權限允許調用System.s etProperty。第三行是運行時權限。在本例中,這個屬性運行通過調用ThreadGroup的d estroy, getParent, resume, setDaemon, setMaxPriority, stop 和 suspend方法修改 線程組。你需要所有這些權限運行JWSDP附帶的JAXM Provider Admin Tool,jaxm-remot e.jar和jaxm-soaprp例子。