打包和部署Web服务
在开始讲述怎样在J2EE上部署web服务之前,让我们先回顾一下J2EE上部署服务的步骤。
你可以按照同样的步骤部署本文后面介绍的其他构件。(如果你有丰富的J2EE经验而不
需要的话,请跳到下一节,该节详细描述了为web服务部署一个特殊工具。部署JAXM Pr
ovider 和 Admin Tool)
在J2EE上部署服务
在J2EE上部署服务时,利用deploytool建立一个新的应用程序EAR文件,且将它与适当的
WAR文件关联并设置web上下文(context)。deploytool通过与J2EE服务器通信来部署和
反部署构件。
注意:jaxrservlet是一个为了说明部署步骤而构想出来的虚构文件。该文件实际上在J
WSDP EA2中并不存在。
在J2EE SDK容器中部署服务
1、 如果J2EE服务器没有运行,则到%J2EE_HOME%in (UNIX: $J2EE_HOME/bin)目录下
并执行j2ee命令来启动它。J2EE服务器必须在启动deploytool之前运行。J2EE服务器启
动可能需要几分钟,等待直到看到"J2EE Server startup complete"的消息。如下:
c:j2sdkee1.3.1in> j2ee
J2EE server listen port: 1050
Redirecting the output and error streams to the following files
c:j2sdkee1.3.1logsJavaj2eej2eesystem.out
c:j2sdkee1.3.1logsjavaj2eej2eesystem.err
J2EE server startup complete
2、 到%J2EE_HOME%in (UNIX: $J2EE_HOME/bin)目录,通过执行deploytool命令启动
deploytool。
3、 选择File->New Application,建立一个新的应用程序EAR文件,如图2所示。
注意:该文的屏幕画面是Windows平台的,但是因为deploytool使用Swing,所以UNIX开
发者也应该可以看到同样的画面。
图2:建立一个新的EAR文件
4、 在出现的对话框中键入要创建的EAR文件名和在deploytool窗口中显示的名字。只要
愿意,可以取任何名字。如图3所示。我建立了一个名为ear-files的目录存放所有的EA
R文件。我的文件的名是jaxrservlet。它的显示名和文件名一样。
图3:选择一个文件名
5、 往应用程序中添加WAR文件(在本例中,是jaxrservlet.war)。选择File->Add to
Application->Web War,然后定位WAR文件并选择它。
6、 设置Web Context,指定web上下文:
选择应用程序(本例中假定是jaxrservlet 应用程序)
选择Web Context页
在如图4所示的Context Root字段中键入上下文。
7、 在Tool菜单中选择Deploy,部署该应用程序。进度对话框报告部署进度。它告诉你
什么时候部署完成,如图5所示。
图5: 部署应用程序
部署JAXM Provider 及其Admin Tool
JAXM Provider是一个异步通信的消息传输提供者。JAXM Provider Admin Tool允许你配
置provider。在运行JAXM Provider Admin Tool前,将JAXM Provider 和JAXM Provide
r Admin Tool部署到单独的J2EE应用程序中。按照下列步骤允许使用了JAXM Provider
的应用程序:
部署JAXM Provider
1、 配置jaxm-provider服务,使用8080端口:打开文件%JWSDP_HOME%servicesjaxm-
providerWEB-INFprovider.XML (UNIX: $JWSDP_HOME/services/jaxm-provider/WEB-
INF/provider.xml) 。然后将http://127.0.0.1:8081/jaxm-provider/receiver/ebxml
改变成http://127.0.0.1:8080/jaxm-provider/receiver/ebxml ,同时将http://127
.0.0.1:8081/jaxm-provider/receiver/soaprp 变成http://127.0.0.1:8080/jaxm-pro
vider/receiver/soaprp
2、 到%JWSDP_HOME%servicesjaxm-provider (UNIX: $JWSDP_HOME/service/jaxm-pr
ovider)目录下,通过执行jar -cvf jaxm-provider.war . 将JAXM Provider打包到一个
WAR文件中。注意该命令末尾有一个点。
3、 将jaxm-provider.jar拷贝到某个位置,如c:jaxm_services并将它从%JWSDP_HOME
%servicesjaxm-provider删除。 (UNIX:拷贝 jaxm-provider.war 到某个位置,如
$HOME/jaxm_services 并将它从$JWSDP_HOME/services/jaxm-provider删除)。该步骤是
必须的,目的是防止从安装Java WSDP的目录加载该服务。
4、 将jaxm-provider.jar打包到一个企业级应用程序,上下文是jaxm-provider,并按
照在J2EE SDK容器中部署服务的步骤进行部署。
部署JAXM Provider Admin Tool
1、 配置jaxm-provideradmin服务,使用8080端口:打开文件%JWSDP_HOME%services
jaxm-provideradminWEB-INFprovider.xml (UNIX: $JWSDP_HOME/services/jaxm-pro
videradmin/WEB-INF/provider.xml) ,然后将http://127.0.0.1:8081/jaxm-provider
/receiver/ebxml 改成http://127.0.0.1:8080/jaxm-provider/receiver/ebxml ,同时
将http://127.0.0.1:8081/jaxm-provider/receiver/soaprp 改成http://127.0.0.1:8
080/jaxm-provider/receiver/soaprp
2、 到%JWSDP_HOME%servicesjaxm-provideradmin (UNIX: $JWSDP_HOME/service/ja
xm-provideradmin)目录下,通过执行jar -cvf jaxm-provideradmin.war . 将JAXM Pr
ovider打包到一个WAR文件中。注意该命令末尾有一个点。
3、 将jaxm-provideradmin.jar拷贝到某个位置,如c:jaxm_services,并将它从%JWS
DP_HOME%servicesjaxm-provideradmin删除。 (UNIX:拷贝 jaxm-provideradmin.wa
r 到某个位置,如 $HOME/jaxm_services 并将它从$JWSDP_HOME/services/jaxm-provi
deradmin删除)。该步骤是必须的,目的是防止从安装Java WSDP的目录加载该服务。
4、 按照前面例子,将jaxm-provideradmin.jar打包到一个新的企业级应用程序,上下
文是jaxm-provideradmin。
5、 增加一个provider角色的用户j2ee。在deploytool中选择jaxm-provideradmin应用
程序。在Security页中,从Role Name列表中选择provider角色。如果provider角色没有
显示,则点击Edit并定义provider,确保选择了jaxm-provideradmin存档。一旦增加了
provider,就可以回到主security菜单。在角色名下选择provider,并点击Add在User
对话框中选择j2ee用户。
6、 确保JAXM Provider应用程序被部署。点击Servers,在已部署的应用程序列表中查
看jaxm-provider。
7、 部署JAXM Provider Admin Tool(J2EE上部署服务指南有详细介绍)。确保web上下
文是jaxm-provideradmin。
运行JAXM Admin Tool
JAXM Provider 和 Admin Tool部署完成后,就可以运行JAXM Admin Tool。
运行JAXM Admin Tool
1、 将浏览器链接到http://127.0.0.1:8080/jaxm-provideradmin。
2、 在提示框中键入登录名和口令,如图6所示。在该例中,我使用"j2ee"作为登录名和
口令。一旦网络验证了登录名和口令,就可以进入JAXM Admin Tool。
图6:JAXM Admin Tool登录
3、 配置消息传输提供者,如图7。
图7:JAXM Admin Tool
运行JAXM 示例
JWSDP下载包里带有一组JAXM示例程序,它们在%JWSDP_HOMEwebapps 目录 (UNIX: $JW
SDP_HOME/webapps) 下。例子说明可以使用JAXM API编写不同的应用程序。本节阐述如
何载J2EE SDK 1.3.x上运行这些例子。
jaxm-simple
这是一个利用本地消息传输提供者发送和接受消息的例子。
部署jaxm-simple例子
1、 使用前面介绍的deploytool,打包jaxm-simple.war到一个企业级应用。文件jaxm-
simple.war在%JWSDP_HOME%webapps (UNIX: $HWSDP_HOME/webapps)目录下。
2、 设置上下文为jaxm-simple。
3、 在J2EE上部署该应用程序。
部署完成后,就可以使用与JWSDP一起运行的相同方式运行它。
运行jaxm-simple应用程序
1、 将浏览器链接到http://127.0.0.1:8080/jaxm-simple。
屏幕与图8类似
2、 点击链接"这里",应该可以看到与图9类似的窗口。
你可以在%J2EE_HOMEin (UNIX: $J2EE_HOME/bin)目录下看到sent.msg和reply.msg。
图8:运行jaxm-simple
图9:jaxm-simple的输出
jaxmtags
这是一个使用jsp标签生产和消费SOAP消息的例子。
部署jaxmtags例子
将jaxmtags.war打包到一个企业级应用程序。
设置上下文为jaxmtags。
在J2EE SDK1.3.x上部署该应用程序。
现在,就可以使用与JWSDP一起运行的相同方式运行这个例子。
运行jaxmtags应用程序
将浏览器链接到http://127.0.0.1:8080/jaxmtags。 屏幕与图10类似
点击三个链接中的一个发送消息,可以看到显示的响应。
图10:运行jaxmtags
jaxm-remote
这是一个使用JAXM消息传输提供者支持基本ebXML发送和接受消息的例子。
部署jaxm-remote服务
将%JWSDP_HOME%webappsjaxm-remote.war拷贝到某个位置,如c: emote。(UNIX: 将
$JWSDP_HOME/webapps/jaxm-remote.war 拷贝到某个位置,如 $HOME/remote)
到目录c: emote (UNIX: $HOME/remote)。
解开jaxm-remote.war:jar xvf jaxm-remote.war
删除WAR文件: c: emote> del jaxm-remote.war (UNIX: $HOME/remote$ rm jaxm-re
mote.war)。
在文件c: emoteWEB-INFclassesclient.xml (UNIX: $HOME/remote/WEB-INF/class
es/client.xml)中将http://127.0.0.1:8081/jaxm-provider/sender 改成http://127.
0.0.1:8080/jaxm-provider/sender
打包jaxm-remote.war文件:c: emote> jar cvf jaxm-remote.war . 注意命令末尾有
一个点。
打包该WAR文件到一个企业级应用程序。
设置上下文为jaxm-remote。
在J2EE SDK1.3.x上部署该应用程序。
运行jaxm-remote应用程序
将浏览器链接到http://127.0.0.1:8080/jaxm-remote。
jaxm-soaprp
这是一个使用JAXM消息传输提供者支持基本SOAP-RP发送和接受消息的例子。
部署jaxm-soaprp服务
将%JWSDP_HOME%webappsjaxm-soaprp.war拷贝到某个位置,如c:soaprp。(UNIX: 将
$JWSDP_HOME/webapps/jaxm-soaprp.war 拷贝到某个位置,如 $HOME/soaprp)
到目录c:soaprp (UNIX: $HOME/soaprp)。
解开jaxm-soaprp.war:jar xvf jaxm-soaprp.war
删除WAR文件: c:soaprp> del jaxm-soaprp.war (UNIX: $HOME/soaprp$ rm jaxm-so
aprp.war)。
在文件c:soaprpWEB-INFclassesclient.xml (UNIX: $HOME/soaprp/WEB-INF/class
es/client.xml)中将http://127.0.0.1:8081/jaxm-provider/sender 改成http://127.
0.0.1:8080/jaxm-provider/sender
打包jaxm-soaprp.war文件:c:soaprp> jar cvf jaxm-soaprp.war . 注意命令末尾有
一个点。
打包该WAR文件到一个企业级应用程序。
设置上下文为jaxm-soaprp。
在J2EE SDK1.3.x上部署该应用程序。
运行jaxm-soaprp应用程序
打开浏览器窗口。
将浏览器链接到http://127.0.0.1:8080/jaxm-soaprp。
jaxm-translator
这是一个将文本翻译成不同语言的一个简单翻译服务。该翻译服务与 babelfish.altav
ista.com进行会话,建立HTTP连接并从应答中抽取对输入字符串的翻译。文本被翻译成
德语、意大利语和法语。为了使该服务可以工作,必须连接到Internet。
部署translation服务
使用deploytool,将jaxm-translator.war打包到一个企业级应用程序。
设置上下文为jaxm-translator。
在J2EE SDK1.3.x上部署该应用程序。
可以使用与JWSDP一起运行的相同方式运行这个例子。
运行translation服务
确保连接到Internet。
将浏览器链接到http://127.0.0.1:8080/jaxm-translator。可以得到如图11类似的屏幕
(在这里,我键入good bye)
键入一些要翻译的文本。
点击radio按钮选择要翻译的方式。返回:在SOAPBody中或者作为JAXM消息的附件。
如果使用代理主机,则键入代理主机名和代理端口(如果不使用代理,则保持空白)。
点击Translate执行该服务。输出如图12所示。
图11:运行translation web服务
图12:translation 服务的输出
结论
通过按照本文中一步一步的指导,你已经学会了怎样配置J2EE SDK 1.3.1使得web服务可
以在上面进行部署。你也知道了怎样部署随JWSDP附带的web服务示例应用程序。
现在你有了构建新的web服务的工具和怎样在J2EE平台上部署它们的知识。通过实践可以
很快学会。也可以从更多信息的其他资源列表学到更多东西,包括超过60次关于web服务
的会议的幻灯片,它们是在3月底的JavaOne期间召开的。
(出处:http://www.knowsky.com)