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%injw2sdponj2ee
.bat (UNIX:$JWSDP_HOME/bin/jw2sdponj2ee.sh)。这些脚本使用一个安装JWSDP的b
in目录下的Ant build文件(jwsdponj2ee.xml)。如果让Ant执行配置过程,可以跳到下
一节了解如何在J2EE平台上打包和部署web服务。如果想了解内部机制,可以按照这里给
出的指南手工进行配置。关于Ant脚本的更多信息,请参看:%JWSDP_HOME%docsjwsdp
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%workjwsdp_jars)。(UNIX:$JWSDP_H
OME/work/jwsdp_jars)
2、 将下列JAR文件从%JWSDP_HOME%commonlib拷贝到%JWSDP_HOME%workjwsdp_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% oolsjstl拷贝到%JWSDP_HOME%workjwsdp_jar(
UNIX:从$JWSDP_HOME/tools/jstl拷贝到$JWSDP_HOME/work/jwsdp_jar)。
jstl.jar
standard.jar
这两个JAR文件提供了jsp标准标签库的实现。
4、 将provider.jar从%JWSDP_HOME%servicesjaxm-providerWEB-INFlib拷贝到%JW
SDP_HOME%workjwsdp._jars(UNIX:从$JWSDP_HOME/services/jaxm-provider/WEB-I
NFlib拷贝到$JWSDP_HOME/work/jwsdp._jars)。
provider.jar是一个JAXM provider,JAXM provider是路由和传输消息的消息传输服务
。它所做的一切对用户都是透明的。只有当应用程序异步(或单向)通信时才需要JAXM
provider。
5、 将目录改变为从%JWSDP_HOME%workjwsdp_jars(UNIX:$JWSDP_HOME/work/jwsdp
_jars)。
6、 利用目录%JWSDP_HOME%workjwsdp_jars(UNIX:$JWSDP_HOME/work/jwsdp_jars)
下的文件建立jwsdp-common.jar。如下:
jar -cvf %JWSDP_HOME%workjwsdp-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%workendorsed_jars)。(UNIX:$JWSD
P_HOME%/work/endorsed_jars)
2、 将下列JAR文件从%JWSDP_HOME%commonendorsed拷贝到%JWSDP_HOME%workendor
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%workendorsed_jars(UNIX:$JWSDP_HOME%/work/end
orsed_jars)。
4、 利用目录%JWSDP_HOME%workendorsed_jars 下的JAR文件建立jwsdp-endorsed.ja
r(UNIX:$JWSDP_HOME%/work/endorsed_jars),如下:
jar -cvf %JWSDP_HOME%workjwsdp-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%libsystem目录下建立一个名为endorsed的目录(UNIX:$J2EE_HO
ME/lib/system)。这个在J2SDK1.4中引入的系统属性指定了Java运行时系统查找JAR文
件的目录。
2、 将jwsdp-endorsed.jar从%JWSDP_HOME%work拷贝到%J2EE_HOME%libsystemendo
rsed(UNIX:$J2EE_HOME/lib/system/endorsed)
3、 打开J2EE环境配置脚本文件%J2EE_HOME%libsetenv.bat(UNIX:$J2EE_HOME/lib
/setevn.sh),在这里设置J2EE环境变量,将jwsdp-endorsed.jar插入CPATH的开始位置
:
set CAPTH= %SYSTEM_LIB_DIR%endorsedjwsdp-endorsed.jar;%CLOUDJARS%;%CLASSES
DIR%
CPATH的其他部分应该保持不变。在UNIX下:CPATH=$SYSTEM_LIB_DIR/endorsed/jwsdp-
endorsed.jar 等等。
4、 打开用户配置脚本文件 %J2EE_HOME%inuserconfig.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%libsystem (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%inj2ee.bat(UNIX: $J2EE_HOME/bin/j2e
e.sh),在文件的最后一行找到the %JAVA_COMMAND% (UNIX: JAVACMD),然后指定系统
属性java.endorsed.dirs如下:
%JAVA_COMMAND%-Djava.endorsed.dirs=%J2EE_HOME%libsystemendorsed (其余行保
持不变) -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%configweb.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%libsecurityserver.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例子。
(出处:http://www.knowsky.com)