EJB是运行在独立服务器上的组件,客户端是通过网络对EJB对象进行调用的。在Java中,能够实现远程对象调用的技术是RMI,而EJB技术基础正是RMI。通过RMI技术,J2EE将EJB组件创建为远程对象,客户端就可以通过网络调用EJB对象了。
EJB在系统中的位置:
三、使用EJB
EJB运行机制:
服务器端:在EJB组件部署到容器上后,容器会自动生成三个对象,这三个对象是:Home对象、Remote对象或Local对象、Enterprise
Bean对象。
客户端调用流程:使用JNDI机制绑定与定位EJB,Context.lookup找回是Home对象,然后在使用Home接口的create方法创建Remote对象;调用Remote接口中的业务方法;使用完EJB应该调用remove方法删除。如下:
(1)发现EJB
客户端需要调用ejb的本地接口,所以需要取得本地接口的远程引用,在J2EE环境中,可以通过JNDI访问这类命名服务,也就是可以使用JNDI来获取EJB本地接口的引用,这是因为EJB容器使用部署中指定的JNDI名字注册了本地接口。(部属EJB时可以设置JNDI名字,客户端就通过JNDI名字来查找到这个EJB)
Try
{
InitialContext ic = new
InitialContext();
Object lookup = ic.lookup(“java:comp/env/ejb/Agency”);
AgencyHome home=(AgencyHome)PortableRemoteObject.narrow(lookup,AgencyHome.class);
}
(2)使用
Try
{
Agency agency = home.create();
//向新创建的EJB返回一个
远程引用。
System.out.println(agency.getAgencyName());
}
(3) 删除
Agency =null
当本地RMI允许检测到远程对象不再有任何本地引用时,将为这个对象触发远程垃圾箱,意味着远程引用超时了,这会导致在服务器端再次引用对象,然后变销毁bean
总结:EJB实现原理,就是把原来放到客户端实现的代码放到服务器端,并依靠RMI进行通信。