一.开发环境: 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
|