王朝网络
分享
 
 
 

在Jboss下Web Service调用EJB一

王朝other·作者佚名  2008-05-31
宽屏版  字体: |||超大  

一.开发环境:

1.Java SDK1.4

2.Eclipse3.0中文版

3.Jboss3.2应用服务器

4.windows 2000中文专业版

二.环境变量的设置:

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

ANT_HOME=C:\ant

JAVA_HOME=C:\j2sdk

JBOSS_HOME=C:\jboss

最后在系统变量的path变量中追加C:\jboss\bin;

三.会话Bean的编写:

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

1.远程接口:

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

package com.ejb.sessionbean;

/** * Remote interface for PersonManager.

*/public interface PersonManager

extends javax.ejb.EJBObject{

public com.pojo.Person getPersonByName( java.lang.String name )

throws java.rmi.RemoteException;

public void storePerson( com.pojo.Person person )

throws java.rmi.RemoteException;

public void deletePerson( java.lang.String name )

throws java.rmi.RemoteException;}

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

(1)getPersonByName方法:通过人员的姓名返回一个Person对象;

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

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

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

2.本地HOME接口的实现:

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

/* * Generated by XDoclet - Do not edit!

*/package com.ejb.sessionbean;

/** * Home interface for PersonManager.

*/public interface PersonManagerHome

extends javax.ejb.EJBHome{

public static final String COMP_NAME="java:comp/env/ejb/PersonManager";

public static final String JNDI_NAME="PersonManagerHomeRemote";

public com.ejb.sessionbean.PersonManager create()

throws javax.ejb.CreateException,java.rmi.RemoteException;}

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

3.具体实现类:

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

package com.ejb.sessionbean;import java.rmi.RemoteException;import java.util.*;import javax.ejb.EJBException;import javax.ejb.SessionBean;import javax.ejb.SessionContext;import com.pojo.*;/*** @ejb.bean description = "PersonManagerBean" display-name = * "PersonManagerBean" jndi-name="PersonManagerHomeRemote" * name="PersonManager" type="Stateless" view-type="remote" *

transaction-type="Container" * @jboss-net.web-service urn = "PersonManagerService" eXPose-all = "true" */public class PersonManagerBeanimplements SessionBean{private SessionContext ctx;private static Map database;/** * @ejb.create-method * */public void ejbCreate(){}public void setSessionContext( SessionContext ctx ) throws EJBException,

RemoteException{

// TODO 自动生成方法存根

}public void ejbRemove() throws EJBException, RemoteException

{

// TODO 自动生成方法存根

}

public void ejbActivate() throws EJBException, RemoteException

{

// TODO 自动生成方法存根

}

public void ejbPassivate() throws EJBException, RemoteException

{

// TODO 自动生成方法存根

}

/**

* @ejb.interface-method view-type = "remote"

* @param name

* @return

*/

public Person getPersonByName( String name )

{

if (database != null)

{

return (Person) database.get(name);

}

return null;

}

/**

* @ejb.interface-method view-type = "remote"

* @param person

*/

public void storePerson( Person person )

{

if (database == null)

{

database = new HashMap();

}

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

}

/**

* @ejb.interface-method view-type = "remote"

* @param name

*/public void deletePerson( String name )

{

if (database != null)

{

database.remove(name);

}

}}

4.数据模型类:

会话BEAN中使用到了一个Person类,该类是一个数据模型,用于数据的封装。实现上和普通的Javabean值对象没有什么区别,不过为了在网络间传递,值对象必须实现序列化接口java.io. Serializable接口,这是个空接口,仅作为标志类型,没有需要实现的方法,代码如下:

import java.io.Serializable;

/*** @jboss-net.XML-schema urn = "person:Person" */public class Person

implements Serializable{

private String name;

public Person()

{

this.name = "unknow";

}

public Person( String name )

{

this.name = name;

}

public String toString()

{

StringBuffer sb = new StringBuffer();

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

return sb.toString();

}

/** * @return 返回 name。

*/public String getName()

{return name;

}/**

* @param name

*

要设置的 name。

*/public void setName( String name )

{

this.name = name;

}}

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

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

利用ant我们可以很方便的自动生成EJB和Web Service的配置文件,省去了手工编写的麻烦。Ant的build.xml文件代码如下:

<?xml version="1.0" encoding="GB2312"?<project name="PersonManager" basedir="." default="xdoclet"

<property environment="evn" /

<property name="generated.dir" location="src" /

<path id="xdoclet.classpath"

<fileset dir="lib"

<include name="**/*.jar" /

</fileset

<pathelement location="bin" /

</path

<target name="xdoclet"

<taskdef classpathref="xdoclet.classpath" classname="xdoclet.modules.ejb.EjbDocletTask" name="ejbdoclet" /

<ejbdoclet ejbSpec="2.0" destDir="src"

<homeinterface /

<remoteinterface /

<jboss Version="3.2" destDir="build/PersonManagerService/META-INF" /

<deploymentdescriptor destDir="build/PersonManagerService/META-INF" /

<fileset dir="src" includes="com/ejb/sessionbean/*.java,com/pojo/*.java"

</fileset

<jbossnet xmlencoding="UTF-8" destdir="build/PersonManagerService/META-INF" webDeploymentName="PersonManagerService" targetNameSpace="http://localhost:8080/pojo/person" prefix="person" /

</ejbdoclet

</target</project

在运行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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有