EJB的使用
<一>实验目的:
1.学习和了解J2EE的EJB规范;
2.使用会话EJB (stateful & stateless);
3.使用会话实体EJB (BMP & CMP)。
<二> 实验内容:
EJB简介: EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序,类似微软的.com技术。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。
下面给出EJB在J2EE的5层模型中的位置及其分类结构图:
EJB的组件:
EJB对象的调用过程:
a) 调用第一步:接口声明
主接口:
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
publicinterface HelloWorldHome extends EJBHome
{
public HelloWorld create()throws CreateException, RemoteException;
}
业务接口:
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
public interface HelloWorld extends EJBObject {
public String helloWorld() throwsRemoteException;
}
b) 调用第二步:创建Home Stub
try {
Context ctx = new InitialContext();
Object h = ctx.lookup("HelloWorldEJB");
home =(HelloWorldHome)PortableRemoteObject.narrow(h,HelloWorldHome.class);
} catch (NamingException e) {……}
c) EJB调用第三步:创建EJB实例调用远程方法
try {
HelloWorld hw = home.create();
System.out.println("Say Hello to EJB.");
String ejbSays = hw.helloWorld();
System.out.println("The EJB said:"+ejbSays);
} catch (Exception e) {…}
会话EJB:基本EJB,一般用于实现业务逻辑
多在分布环境中应用:基本功能与一般Java bean相差不大;跨地址空间使用;可视为远程对象的扩展。分为有状态与无状态两种。
有状态与无状态的差别:
a) 部署上的差别,在ejb-jar.xml的<session-type></session-type>字段中,有状态是Stateful;无状态是stateless
b) 调用实现上效果的差别,Stateful Session Bean可以一对一保持调用客户的状态,Stateless Session Bean在方法调用之间不会保持某个调用客户的状态
实体EJB(BMP & CMP):
a) BMP (Bean managed persistence) :BMP是在Bean中完成对数据库JDBC的各种调用,也就是说,在你的实体bean(entity bean)中,明确写入了SQL语句,如“insert .. ”或“select ..”,并且使用Datasource获得一个数据库资源以及连接(connection)从而对数据库直接进行增加、删除和修改。
b) CMP (Container managed persistence ):CMP是由EJB容器自动完成对数据库的操作,你所有做的,就是在实体bean重写入SetXXX或getXXX方法,然后在ejb-jar.xml
中定义cmp-field就可以。
<三>实验步骤 :
1) WebLogic的安装和创建工作区:
安装过程详见前面的实验。打开WebLogic安装目录,双击运行/weblogic81/common/bin/config.cmd,创建自己的工作区,过程类似前面的实验。创建用户名和密码,然后修改Configuration Name为lab10。完成后启动WebLogic服务。在上步中你已创建一个工作区,假设为lab10,则在\bea\user_projects中有一个lab10目录。运行startWeblogic.cmd。登录Weblogic管理控制台,打开IE浏览器,输入:http://localhost:7001/console,输入工作区的用户名和密码。
2) WebLogic平台下部署Web应用:
主目录ejb结构如下图:
在sessionEJB目录下,修改环境设置setEnv.bat,运行EJB_Packet.bat对
sessionEJB目录下的其它文件进行打包,生成sessionEJB.jar。
e) 从IE中进入到Weblogic控制台界面,点击lab10->Deplayments->EJB Modules,点击“Deploy a new EJBModule... ”,根据提示选择
所要部署的Web应用的jar文件。
无状态:
组要是使用会话ejb,试验中通过对比有无状态的ejb来加深对有无会话ejb的了解。有状态会话ejb封装了业务逻辑和特定于某个客户的状态。无状态则ejb则是不保留会话状态。一般无状态的话只有一个实例对多个进程进行服务,所以该对象里面的某个属性可能在别人修改后自己再读取,从而在读取时与自己原先赋值的内容不一致。有状态的则保持一个会话服务一个客户,同时保持用户对对象的操作更变。