作者:曾巧(numenzq)
等级:初级
本文介绍了用OC4J和Axis构建Web服务,主要是用OC4J实现服务端,而用Axis实现客户端。
版本说明
l JDK:1.4.2_08
l OC4J:10.1.3.0.0
l Axis:1.4
l Ant:1.6.2(OC4J自带)
OC4J简介
Oracle Containers for J2EE (OC4J) 是 Oracle 应用服务器的核心 J2EE 运行时组件。OC4J 与 J2EE 1.4 兼容,并运行在标准的 J2SE 版本上,它在保有易于使用和高产出传统的同时,还为生产环境提供了杰出的性能和可伸缩性。
安装OC4J
从OC4J官方网站下载最新版本的安装文件:
http://www.oracle.com/technology/global/cn/tech/java/oc4j/index.html
由于OC4J各版本的安装方法各有不同,所以安装方法应参见安装包里的Readme.txt,根据该文档的描述来安装OC4J。
OC4J的运行与停止
第一次启动OC4J时,程序会提示你设计初始密码,默认值为welcome。我们可以通过<oc4j_install_dir>\bin\oc4j.cmd来启动OC4J应用服务器,命令如下:
cd <oc4j_install_dir>\bin
oc4j –start
也可以在<oc4j_install_dir>\j2ee\home目录下直接启动OC4J,命令如下:
cd <oc4j_install_dir>\j2ee\home
java –jar oc4j.jar
如果你要使用自定义的server.xml配置文件启动OC4J的话,可以使用下面的命令(假设server.xml文件存放在conf文件夹下):
cd <oc4j_install_dir>\j2ee\home
java -jar oc4j.jar -config /conf/server.xml
如果正常启动了OC4J,控制台信息应如下:

你也可以通过http://localhost:8888/来判断是否正常启动。
要停止OC4J也相当简单,直接在控制台同时按下Ctrl+C即可。你也可以使用命令使OC4J停止,如下:
cd <oc4j_install_dir>\bin
oc4j -shutdown -port 23791 -password welcome
集成OC4J到MyEclipse里
在Eclipse菜单里选择Window->Preferences…,然后在Preferences框的左边列表里选择MyEclipse->Application Servers->Oracle 9i/AS,如下图:

首先把Oracle 9i AS设置成为Enable状态,并在Oracle AS Home Directory里填入:<oc4j_install_dir>\j2ee\home,然后在第二栏填入你安装oc4j所使用的密码,最后设置你的JDK路径如图:

用Ant部署应用到OC4J
下面Ant脚本里所用到的一些参数的解释如下:(下述均为默认值,如果在你应用程序中有所不同,你得做出相应的修改)。
${j2ee.home}——<oc4j_install_dir>/j2ee/home
${oc4j.deploy.ormi}——ormi://localhost
${oc4j.deploy.username}——oc4jadmin
${oc4j.deploy.password}——welcome
${this.build}——./lib
${this.application.name}——application name
${this.ear}"——${this.application.name}.ear
${this.war}——${this.application.name}-web
${this.uri}——${this.application.name}
发布EAR文件:
<target name="deploy" depends="core">
<java jar="${j2ee.home}/admin.jar" fork="yes">
<arg value="${oc4j.deploy.ormi}"/>
<arg value="${oc4j.deploy.username}"/>
<arg value="${oc4j.deploy.password}"/>
<arg value="-deploy"/>
<arg value="-file"/>
<arg value="${this.build}/${this.ear}"/>
<arg value="-deploymentName"/>
<arg value="${this.application.name}"/>
</java>
</target>
上面的Ant脚本用java命令执行如下:
java -jar ${j2ee.home}/admin.jar ${oc4j.deploy.ormi} ${oc4j.deploy.username} ${oc4j.deploy.password} -deploy -file ${this.build}/${this.ear} -deploymentName ${this.application.name}
绑定Web应用程序:
<target name="bind-web-app" depends="deploy">
<java jar="${j2ee.home}/admin.jar" fork="yes">
<arg value="${oc4j.deploy.ormi}"/>
<arg value="${oc4j.deploy.username}"/>
<arg value="${oc4j.deploy.password}"/>
<arg value="-bindWebApp"/>
<arg value="${this.application.name}"/>
<arg value="${this.war}"/>
<arg value="http-web-site"/>
<arg value="/${this.uri}"/>
</java>
</target>
上面的Ant脚本用java命令执行如下:
java -jar ${j2ee.home}/admin.jar ${oc4j.deploy.ormi} ${oc4j.deploy.username} ${oc4j.deploy.password} -bindWebApp ${this.application.name} ${this.war} http-web-site /${this.uri}
在最新的OC4J 10g (10.1.3)版本中,参数http-web-site已改为default-web-site,你可以在<oc4j_install_dir>\j2ee\home\config\目录里找到default-web-site.xml配置文件。
取消部署:
<target name="undeploy" depends="init">
<java jar="${j2ee.home}/admin.jar" fork="yes">
<arg value="${oc4j.deploy.ormi}"/>
<arg value="${oc4j.deploy.username}"/>
<arg value="${oc4j.deploy.password}"/>
<arg value="-undeploy"/>
<arg value="${this.application.name}"/>
</java>
</target>
上面的Ant脚本用java命令执行如下:
java -jar ${j2ee.home}/admin.jar ${oc4j.deploy.ormi} ${oc4j.deploy.username} ${oc4j.deploy.password} -undeploy ${this.application.name}
编码
通过对上面基本信息的学习,我们现在来编写一个简单的应用程序并部署到OC4J应用服务器上。为了方便理解,我们这个程序只有一个Hello.java接口文件,HelloImpl.java接口实现文件和application.xml,web.xml两个配置文件;为了例子的完整性,另外添加了一个index.html文件。该web服务提供sayHello(String name)方法供外部使用。下面就来讲讲具体实现。
该应用程序的包结构如下:

Hello.java
package com.gelc.ws.server;
public interface Hello {
public String sayHello(String name);
}
HelloImpl.java
package com.gelc.ws.server;
public class HelloImpl {
public HelloImpl() {}
public String sayHello(String name) {
return ("Hello " + name);
}
}
application.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
'-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN' 'http://java.sun.com/dtd/application_1_3.dtd'>
<application>
<display-name>Web Services Example</display-name>
<description>Java Web Service Example</description>
<module>
<web>
<web-uri>hellows-web.war</web-uri>
<context-root>/hellows</context-root>
</web>
</module>
</application>
该配置文件是为发布该应用到OC4J而服务的。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
'-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'>
<web-app>
<servlet>
<servlet-name>Hello Web Service</servlet-name>
<servlet-class>oracle.j2ee.ws.StatelessJavaRpcWebService</servlet-class>
<init-param>
<param-name>interface-name</param-name>
<param-value> com.gelc.ws.server.Hello</param-value>
</init-param>
<init-param>
<param-name>class-name</param-name>
<param-value> com.gelc.ws.server.HelloImpl</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Hello Web Service</servlet-name>
<url-pattern>/helloService</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
该配置文件除了配置web应用的相关信息外,更重要的是设置了<servlet-class>oracle.j2ee.ws.StatelessJavaRpcWebService</servlet-class>和相应得参数。
index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Web Services Example</title>
<meta http-equiv="keywords" content="Web Services,OC4J,Axis">
<meta http-equiv="description" content="Web Services Example">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<ul>
<li>Hello Stateless Web Service</li>
<li><a href="helloService?wsdl">WSDL</a></li>
<li><a href="helloService?proxy_jar">Proxy Jar</a></li>
<li><a href="helloService?proxy_source">Proxy Source</a></li>
</ul>
</body>
</html>
最后要使用Ant来打包和发布该Web服务。值得注意的是,一定要使用OC4J自带的Ant来构建,ANT_HOME:<oc4j_install_dir>\ant.由于build.xml文件内容比较多,这里就不帖出来了,具体的请参加源代码。常用命令如下:
l ant 编译java文件,并打包ear和war文件
l ant deploy 部署该工程到OC4J服务器,在部署时,应保证OC4J服务器正常运行。
l ant undeploy 撤销部署,从OC4J里删除该工程
l ant clean 清空工程,删除build和lib文件
Axis简介
目前Apache Axis已经发展到了第三代,其核心是一个SOAP处理器,用于开发包括客户端,服务器端,SOAP Gateway等各种应用。事实上Apache Axis在了1.0版后,其发行版本还包括了完整的J2EE服务器插件, WSDL支持和生成,TCP/IP监视器等组件,从这个意义上来说Apahce Axis已不仅仅是个SOAP框架了,它包含了除了UDDI外对整个Web Service协议栈(Protocol Stack)的支持。
安装Axis
从Axis官方网站下载最新版本的安装文件:
http://ws.apache.org/axis/
直接解压下载的压缩包到安装目录即可。
编码
我们现在就写一个客户端代码来调用上面Web服务所提供的sayHello(String name)方法。由于代码并不复杂,我就先把代码贴出来:
package src.client;
import java.net.MalformedURLException;
<