一.开发环境:
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 personmanagerbean implements 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
闽公网安备 35060202000074号