在Jboss环境下Web Service调用EJB.docx

上传人:b****3 文档编号:3455271 上传时间:2022-11-23 格式:DOCX 页数:16 大小:312.72KB
下载 相关 举报
在Jboss环境下Web Service调用EJB.docx_第1页
第1页 / 共16页
在Jboss环境下Web Service调用EJB.docx_第2页
第2页 / 共16页
在Jboss环境下Web Service调用EJB.docx_第3页
第3页 / 共16页
在Jboss环境下Web Service调用EJB.docx_第4页
第4页 / 共16页
在Jboss环境下Web Service调用EJB.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

在Jboss环境下Web Service调用EJB.docx

《在Jboss环境下Web Service调用EJB.docx》由会员分享,可在线阅读,更多相关《在Jboss环境下Web Service调用EJB.docx(16页珍藏版)》请在冰豆网上搜索。

在Jboss环境下Web Service调用EJB.docx

在Jboss环境下WebService调用EJB

本文描述了如何在Jboss环境下WebService调用EJB..作者用实例代码一步一步详细描述了整个过程...既然是实战,讲究的是实用性,所以关于Jboss、WebService和EJB的入门介绍这里就免去了,请自行查阅相关资料。

好,实战正式开始!

  一.开发环境:

  1.JavaSDK1.4

  2.Eclipse3.0中文版

  3.Jboss3.2应用服务器

  4.Windows2000中文专业版

  二.环境变量的设置:

  以下是我自己机器的环境变量设置,如果是linux系统,设置有所不同:

  ANT_HOME=C:

\ant

  JAVA_HOME=C:

\j2sdk

  JBOSS_HOME=C:

\jboss

  最后在系统变量的path变量中追加C:

\jboss\bin;

  三.会话Bean的编写:

  在EJB中,会话BEAN需要实现一个远程接口和一个本地接口,那我们就先实现这个两个接口:

  1.远程接口:

  我们实现的是一个人员管理的用例,这个用例包含3个方法,代码如下:

4.数据模型类:

  会话BEAN中使用到了一个Person类,该类是一个数据模型,用于数据的封装。

实现上和普通的Javabean值对象没有什么区别,不过为了在网络间传递,值对象必须实现序列化接口java.io.Serializable接口,这是个空接口,仅作为标志类型,没有需要实现的方法,代码如下:

importjava.io.Serializable;

/**

*@jboss-net.xml-schemaurn="person:

Person"

*/

publicclassPerson

implementsSerializable

{

privateStringname;

publicPerson()

{

this.name="unknow";

}

publicPerson(Stringname)

{

this.name=name;

}

publicStringtoString()

{

StringBuffersb=newStringBuffer();

sb.append("name="+this.name+"\n");

returnsb.toString();

}

/**

*@return返回name。

*/

publicStringgetName()

{

returnname;

}

/**

*@paramname

*要设置的name。

*/

publicvoidsetName(Stringname)

{

this.name=name;

}

}

  另外,在PersonManagerBean和Person类中都使用了xdoclet标志,这个是为了能通过jbossIDE插件来产生ant的build文件,然后自动生成EJB的配置文件和WebService的配置文件。

  四.使用ant产生EJB和WebService的配置文件

  利用ant我们可以很方便的自动生成EJB和WebService的配置文件,省去了手工编写的麻烦。

Ant的build.xml文件代码如下:

xmlversion="1.0"encoding="GB2312"?

>

 

 

packagecom.ejb.sessionbean;

/**

*RemoteinterfaceforPersonManager.

*/

publicinterfacePersonManager

extendsjavax.ejb.EJBObject

{

publiccom.pojo.PersongetPersonByName(java.lang.Stringname)

throwsjava.rmi.RemoteException;

publicvoidstorePerson(com.pojo.Personperson)

throwsjava.rmi.RemoteException;

publicvoiddeletePerson(java.lang.Stringname)

throwsjava.rmi.RemoteException;

}

  PersonManager接口实现的是EJB的远程接口EJBObject,包含3个方法,描述如下:

  

(1)getPersonByName方法:

通过人员的姓名返回一个Person对象;

  

(2)storePerson方法,通过一个Person对象参数,往人员集合中存储一个人员对象;

  (3)deletePerson方法,根据一个人员的姓名从人员集合中删除一个人员对象

  由于是远程接口,所以每个方法必须抛出RemoteException异常。

  2.本地HOME接口的实现:

  为了提高EJB的性能,如果是在同一个虚拟机中,EJB可以通过本地接口来调用方法,以提高运行速度。

实现代码如下:

/*

*GeneratedbyXDoclet-Donotedit!

*/

packagecom.ejb.sessionbean;

/**

*HomeinterfaceforPersonManager.

*/

publicinterfacePersonManagerHome

extendsjavax.ejb.EJBHome

{

publicstaticfinalStringCOMP_NAME="java:

comp/env/ejb/PersonManager";

publicstaticfinalStringJNDI_NAME="PersonManagerHomeRemote";

publiccom.ejb.sessionbean.PersonManagercreate()

throwsjavax.ejb.CreateException,java.rmi.RemoteException;

}

  PersonManagerHome接口只有一个方法,create方法,它与会话bean的具体实现类中ejbCeate方法一一对应。

  3.具体实现类:

  PersonManagerBean是会话BEAN的具体实现类,必须实现SessionBean接口,而且同时实现了在远程接口中定义的相关业务逻辑方法,具体实现代码如下

packagecom.ejb.sessionbean;

importjava.rmi.RemoteException;

importjava.util.*;

importjavax.ejb.EJBException;

importjavax.ejb.SessionBean;

importjavax.ejb.SessionContext;

importcom.pojo.*;

/**

*@ejb.beandescription="PersonManagerBean"display-name=

*"PersonManagerBean"jndi-name="PersonManagerHomeRemote"

*name="PersonManager"type="Stateless"view-type="remote"

*transaction-type="Container"

*@jboss-net.web-serviceurn="PersonManagerService"expose-all="true"

*/

publicclassPersonManagerBean

implementsSessionBean

{

privateSessionContextctx;

privatestaticMapdatabase;

/**

*@ejb.create-method

*

*/

publicvoidejbCreate()

{

}

publicvoidsetSessionContext(SessionContextctx)throwsEJBException,

RemoteException

{

//TODO自动生成方法存根

}

publicvoidejbRemove()throwsEJBException,RemoteException

{

//TODO自动生成方法存根

}

publicvoidejbActivate()throwsEJBException,RemoteException

{

//TODO自动生成方法存根

}

publicvoidejbPassivate()throwsEJBException,RemoteException

{

//TODO自动生成方法存根

}

/**

*@ejb.interface-methodview-type="remote"

*@paramname

*@return

*/

publicPersongetPersonByName(Stringname)

{

if(database!

=null)

{

return(Person)database.get(name);

}

returnnull;

}

/**

*@ejb.interface-methodview-type="remote"

*@paramperson

*/

publicvoidstorePerson(Personperson)

{

if(database==null)

{

database=newHashMap();

}

database.put(person.getName(),person);

}

/**

*@ejb.interface-methodview-type="remote"

*@paramname

*/

publicvoiddeletePerson(Stringname)

{

if(database!

=null)

{

database.remove(name);

}

}

}

在运行ant之前还必须做2件事情:

  1.到${JBOSS_HOME}\server\all\lib目录下将jboss-j2ee.jar文件复制到当前项目的lib目录下,如果没有lib目录,自己创建一个。

  2.将${ECLIPSE_HOME}\plugins\org.jboss.ide.eclipse.xdoclet.core_1.4.1目录下的所有jar文档也复制到当前项目的lib目录中。

注:

这个目录只有安装了Jboss-IDE插件之后才会有。

  运行ant命令,如果顺利完成,会在当前项目的build/PersonManagerService/META-INF目录下产生3文xml文件:

ejb-jar.xml、jboss.xml和web-service.xml

  五.利用Jboss-IDE插件部署发布EJB和WebService

  1.Jboss-IDE插件的下载和安装

  Jboss-IDE是Jboss推荐的一个辅助J2EE开发的Eclipse插件,可以去

  2.利用Jboss-IDE打包EJB

  切换到java透视图模式下,然后在项目名称上点击右键,在出现的右键菜单上选择属性,在出现的窗口中选择PackagingConfiguration选项,出现如下的窗口

 

  以上是设置完成之后的最终窗口,如果没有设置,请点击add…按钮,出现如下窗口

  在name框中输入打包jar文档的名称,我们可以输入PersonManager.jar,在Destination中点击Browse按钮,选择当前项目中的bulid目录,这个选项是指定jar文件的输出目录,如果当前项目中没有build目录,请自己创建一个。

完成之后点击确定完成;

  PersonManager.jar选项上点击右键,在出现的右键菜单上选择AddFolder选项,出现以下窗口

  在Folder输入框中选择会话bean的class文件,如:

/WebService/bin/com/ejb/sessionbean,在Includes输入框中输入*.class,表示将该目录下的所有class文件进行打包,在perfix中输入class文件的打包路径,如:

com/ejb/sessionbean,这个路径必须和类中的package的设置一样,然后点击确定完成。

  用同样的方法再创建一个class目录,就是Person对象。

完成之后如下图:

  点击确定完成;

  接下去是指定2个打包用的EJB的配置文件,在PersonManager.jar选项上点击右键,在出现的右键菜单上选择AddFile选项,出现以下窗口

  在File输入框中选择ejb-jar.xml文件的路径,在Perfix框中输入META-INF,表示该配置文件将被打包到META-INF目录中。

  用相同的方法将另外一个配置文件jboss.xml也打包进来,如下图

完成之后,就完成了EJB部分的打包设置。

  接下来是WebService的打包设置,WebService很简单,只要将web-service.xml配置文件打包成wsr文件就可以了,点击add按钮,输入打包名称,选择输出目录,点击确定,如下图

在PersonManagerService.wsr选项上点击右键,在出现的右键菜单上选择AddFile选项出现如下窗口

在File输入框中选择web-service.xml配置文件的路径,在Prefix输入框中输入META-INF,表示配置文件将被打包到META-INF目录中。

点击确定完成。

  到此所有的打包配置工作全部完成。

完成之后会在项目的根目录下产生一个packaging-build.xml文件,其实它是一个ant的build文件,有兴趣的可以打开看看。

可以学到不少东西。

接下去是运行ant,进行打包,在项目名称上点击右键,在出现的右键菜单上点击RunPacking选项,如下图

如果运行成功,则会去build目录下产生2个文件,PersonManager.jar和PersonManagerService.wsr文件,前一个是EJB打包文件,第2个是WebService打包文件。

如下图所示

3.EJB和WebService的部署与发布

  在PersonManager.jar文件上点击右键,在出现的右键菜单上选择Deployment->Deployto选项,将EJB发布到jboss服务器中,如下如所示

用同样的方法部署发布PersonManagerService.wsr文件,完成EJB和WebService的发布部署。

需要注意的是,通过上面的方法发布应用程序,需要在Eclipse中设置Jboss服务器的安装路径,相关设置请查阅Jboss-IDE的使用说明。

另外的一个发布方法,是利用Jboss的热部署特性,直接将PersonManager.jar和PersonManagerService.wsr这2个文件直接复制到${JBOSS_HOME}\server\all\deploy目录下即可。

由于Jboss3.2只有在all模式下才包含WebService的支持,所以一定要复制到all目录中的deploy目录下。

至此所有的开发部署已经完成!

  六.测试Jboss的服务是否已经成功发布

  要测试服务已经成功启动,请使用以下方法

  1.启动jboss服务器,注意启动服务器需要带all参数,如下如所示

启动成功之后的画面如下

在红色线框中我们已经可以看到EJB(PersonManager.jar)已经部署成功了。

  2.检查WebService是否已经启动。

打开浏览器,输入http:

//localhost:

8080/jboss-net/servlet/AxisServlet,出现如下的页面:

从中我们发现PersonManagerService这个服务已经启动了。

包含getPersonByName,getPersonList,storePerson和deletePerson方法,注:

其中getPersonList方法应该是没有的,因为在该篇文章中我们并没有在会话bean的实现类中实现这个方法,也没有在远程接口中定义这个方法。

  到此我们已经测试完成了,并证明EJB和WebService都已经成功的发布或启动了。

  七.编写客户端进行测试

  我们使用application的方式编写一个客户端程序对刚才发布的EJB和WebService进行测试。

代码如下:

packagecom.webservice.client;

import.*;

importjavax.xml.namespace.*;

importjavax.xml.rpc.ParameterMode;

importorg.apache.axis.client.*;

importorg.apache.axis.encoding.*;

importorg.apache.axis.encoding.ser.BeanSerializerFactory;

importorg.apache.axis.encoding.ser.BeanDeserializerFactory;

importcom.pojo.*;

publicclassPersonManagerClinet

{

publicstaticvoidmain(Stringargs[])throwsException

{

Stringendpoint="http:

//localhost:

8080/jboss-net/services/PersonManagerService";

Serviceservice=newService();

Callcall=(Call)service.createCall();

call.setTargetEndpointAddress(newURL(endpoint));

QNameqn=newQName("http:

//localhost:

8080/pojo/person","Person");

call.registerTypeMapping(Person.class,qn,newBeanSerializerFactory(

Person.class,qn),

newBeanDeserializerFactory(Person.class,qn));

Personperson=null;

call.setOperationName("storePerson");

call.addParameter("person",XMLType.XSD_ENTITY,ParameterMode.IN);

person=newPerson("java");

call.invoke(newObject[]{person});

System.out.println("OK!

");

call.setOperationName("getPersonByName");

call.addParameter("name",XMLType.XSD_STRING,ParameterMode.IN);

call.setReturnType(qn);

person=(Person)call.invoke(newObject[]{"java"});

System.out.println(person);

}

}

  运行结果如下:

可以看到服务已经运行了,并返回了正确的结果。

到此我们已经完成了在Jboss环境下WebService调用EJB的开发,另外jboss自从4.0开始升级了其WebService模块,由原来的jboss-net升级到了ws4ee,而且部署和发布也发生很大的变化,可以说,在3.2下的调试成功的WebService在

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1