大家好,我是bluesky35(蓝天),好久不见了,抽空和大家交流一下EJB的有关问题,听说过或做过JAVA的人一定知道EJB(Enterprise JavaBean)的存在,EJB作为JAVA的一项重要标准,已经被广泛应用,它的状态持久性和出色的WebService表现一度令人拍案叫绝,EJB大致分为三种类型(实体Bean,会话Bean和消息驱动Bean).会话Bean又称为Session Bean,它分为有状态的会话Bean(Stateful Bean)和无状态的会话Bean(Stateless Bean),今天我就来演示一下简单的无状态的会话BEAN的应用.
示例环境:jdk1.3 + j2eesdk1.3
EJB开发过程:
1.定义EJB Remote接口.
2.定义EJB需要的create,remove,find等Home接口.
3.使用EJB class实现EJB Remote接口.
4.实现EJB Home接口.
5.使用ejb-jar.xml配置发布信息.
6.部署EJB组件.
7.我们最后还会编写客户端程序访问EJB.
一.环境配置
首先我们需要安装jdk1.3和j2eesdk1.3,安装过程我这里就不多说了,安装好后需要做一下配置,配置如下:
1.右击我的电脑->系统->详细设置->环境变量,如下图所示:
2.在系统变量一栏里新建一个变量JAVA_HOME,值为JDK安装的目录,如下图所示:
然后按照以上方法再建立一些环境变量如下:
变量名:J2EE_HOME 值:J2EE安装的根目录,我这里是E:/j2sdkee1.3.1
变量名:LIB 值:%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;
变量名:Path 值:%J2EE_HOME%/bin;%JAVA_HOME%/bin;
好了,环境配置好了,我们开始我们的EJB之旅了.
二.创建EJB
1.定义远程接口.
首先我们编写Converter.java,定义无状态会话Bean的远程接口,代码如下:
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
/**
* @author bluesky35
*/
public interface Converter extends EJBObject{
public double DollarsTORMB(double dollars) throws RemoteException;
public double RMBTODollars(double RMB) throws RemoteException;
}
2.定义本地接口.
然后我们编写ConverterHome.java,定义无状态会话Bean的本地接口,代码如下:
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
/**
* @author bluesky35
*/
public interface ConverterHome extends EJBHome{
public Converter create() throws RemoteException,CreateException;
}
3.定义Bean类.
最后我们编写ConverterEJB.java,定义无状态会话Bean的Bean类,代码如下:
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
/**
* @author bluesky35
*/
public class ConverterEJB implements SessionBean{
private SessionContext ctx;
public double DollarsTORMB(double dollars){
return dollars * 8.3000;
}
public double RMBTODollars(double RMB){
return RMB / 8.3000;
}
public ConverterEJB(){
}
public void ejbCreate(){
}
public void ejbRemove(){
}
public void ejbActivate(){
}
public void ejbPassivate(){
}
public void setSessionContext(SessionContext sc){
ctx = sc;
}
}
4.编译EJB源代码
我们编写compileEJB.bat,使用批处理编译EJB源代码,将该bat放在和刚才编写的3个EJB文件的同一目录下即可,bat内容如下:
set J2EE_HOME=<J2EE的根目录>我这里是E:/j2sdkee1.3.1
set EEPATH=.;%J2EE_HOME%/lib/j2ee.jar
javac -classpath %EEPATH% ConverterEJB.java ConverterHome.java Converter.java
我们已经实现了一般EJB开发过程的前四步,即定义了远程,本地接口和Bean类,并且已经进行了编译.大家按以上步骤做好后看一下目录中的文件和结构是不是和我的相同,见下图:
如果相同的话恭喜你,你可以进入下一步了,接下来我们使用J2EE的SDK直接发布和部署EJB组件,一般开发过程第五步中的ejb-jar.xml将会在发布时自动创建.
三.打包和部署EJB组件
1.打包EJB组件
我们写好EJB并且编译好以后就可以发布组件了,EJB不能直接部署到J2EE Server上,它必须先被添加,再被部署到一个J2EE应用上,现在创建一个J2EE应用ConverterApp,并将它保存为文件ConverterApp.ear中,过程如下:
(1).用j2ee -verbose命令,在命令行环境下启动J2EE Server,看到J2EE server startup complete这句话,表示服务器已经启动,如下图所示:
(2).接下来在另一个终端窗口使用deploytool命令运行应用部署工具(Application Deployment Tool),如下图所示:
启动好以后大家可以看到以下画面:
(3).创建一个新的J2EE应用.在应用部署工具中选择[File]菜单,从[File]菜单中选择[New Application],单击[Brows],在文件选择中,定位要放置ConverterApp.ear的目录,输入文件名:ConverterApp.ear,单击[New Application]按钮,单击[OK],完成后如下图所示:
(4)在[File]菜单中选择[New Enterprise Bean],显示Wizard对话框,单击[Next]按钮,在Create New JAR File in Application中选定Converter,在JAR Display Name框中输入ConverterJAR,然后单击Contents右边的[Edit...]按钮,选择Converter.class,ConverterEJB.class和ConverterHome.class并单击[Add]按钮加到Contents of Converter JAR框中,如下图所示:
单击[OK]按钮,完成结果如下图所示:
单击[Next]按钮,在下面的General对话框中的Bean Type项目中选择Session,下面选择Stateless,Enterprise Bean Class框中选择ConverterEJB,Enterprise Bean Name框中输入ConverterBEAN,在右边的Remote Home Interface框中选择ConverterHome,Remote Interface框中选择Converter,完成后的画面如下:
单击[Next]按钮,然后在随后的对话框中单击[Finish]按钮完成部署.
部署完后的主画面如下图:
2.部署EJB组件
在主画面上选择Converter结点,单击菜单栏上的[Tools]->[Deploy...]弹出发布对话框,在Object to Deploy一栏里选择我们要发布的EAR Converter,在Target Server一栏里我们选择localhost,选择Return Client Jar和Save object before deploying复选框,发布向导会为我们创建ConverterClient.jar,单击[Next]按钮,在第二个对话框中,确定ConverterBean的JNDI名是MyConverter,单击[Next]按钮,在随后的对话框中,单击[Finish]按钮.部署完毕后,在Deployment Progress对话框中,单击[OK]按钮.至此,J2EE应用部署完毕!
EJB组件已经部署完毕,大家的目录结构应该和下面的目录结构相同:
四.编写客户端应用程序进行测试
1.编写客户端App
编写客户端测试应用程序ConverterClient.java,代码如下:
/**
* @author bluesky35
*/
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
public class ConverterClient{
public static void main(String[] args) {
try{
Context initial = new InitialContext();
Object objref = initial.lookup("MyConverter");
ConverterHome home =
(ConverterHome)PortableRemoteObject.narrow(objref,ConverterHome.class);
Converter currencyConverter = home.create();
double amount = currencyConverter.DollarsTORMB(100.00);
System.out.println(String.valueOf(amount));
amount = currencyConverter.RMBTODollars(100.00);
System.out.println(String.valueOf(amount));
currencyConverter.remove();
}
catch(Exception e){
}
}
}
2.编译客户端应用程序
编写compileClient.bat批处理程序编译客户端应用程序,代码如下:
set J2EE_HOME=E:/j2sdkee1.3.1
set EEPATH=.;%J2EE_HOME%/lib/j2ee.jar;Converter.class;ConverterEJB.class;ConverterHome.class;
javac -classpath %EEPATH% ConverterClient.java
运行compileClient.bat,在目录下会生成ConverterClient.class
3.运行测试程序
好了,终于到了最后最激动人心的时刻了,我们即将运行测试程序进行测试.
编写testClient.bat批处理程序进行测试,内容如下:
set J2EE_HOME=E:/j2sdkee1.3.1
set EEPATH=%J2EE_HOME%/lib/j2ee.jar;E:/EjbTest/ConverterClientApp.jar;
java -classpath %EEPATH% ConverterClient
注意:如果你停止了Server,请别忘了在测试程序之前在命令行下使用j2ee -verbose命令启动Server,因为我们前面发布的EJB组件在Server Container里呢.
最后在命令行下运行testClient.bat,结果如下:
最后祝大家平平安安,快快乐乐,下次再见!