EJB技术有赖于2种重要技术的存在:Java RMI-IIOP和JNDI.EJB客户仅仅同其暴露的单一接口进行交互。其中暴露的接口
和企业Bean本身必须遵循EJB规范。EJB规范要求企业Bean暴露若干所要求的方法,而这些暴露的方法是供EJB容器统一管理他
们使用的,无论EJB组件部署在何种EJB容器中。
EJB2.1规范定义了3种EJB组件类型。
会话Bean:会话Bean用于建模业务过程。即为完成某些任务而存在。
实体Bean:实体Bean用于建模业务数据。他们是数据对象。实体Bean是用于缓存数据库信息的Java对象。
消息驱动Bean:MDB类似于会话Bean,因为它们都是为完成某些任务而存在的。
EJB组件是基于分布式对象构建的,远程系统能够调用分布式对象。当然,进程内的客户、进程外的客户及网络中的其他
客户都能够与分布式对象进行交互。具体过程如下:
客户调用存根:即为客户端提供的代理对象。存根负责将网络通信屏蔽掉,这对于客户而言意义深远。存根能够使用
Socket访问网络中的其他资源,其间将调用所需的参数构建成网络要求的调用格式。
借助于网络:存根能够实现与服务器端的骨架进行交互。骨架是为服务器端提供的代理对象。骨架负责将网络通信屏蔽
掉,这对于分布式对象而言意义深远。骨架能够处理来自Socket的访问请求。当然,骨架还能够将存根构建好的参数转换成
Java表示。
骨架将具体的客户调用委派给合适的分布式对象实现。因此,该对象将完成具体的访问请求,并将结果返回给骨架。依
此类推,骨架将结果返回给存根,最后客户将获得分布式对象的响应结果(通过存根获得)。
重要:存根和服务器端实现的对象都实现了同一接口(称之为远程接口)。其意味着存根克隆了分布式对象的方法签名。
调用存根中的方法的客户以为其自身直接调用了分布式对象,但实际情况是客户直接调用存根,而存根处理具体的网络访问
工作。因此,这可以称之为分布透明性。
分布式对象是对如下几个协作对象的一种抽象:存根、骨架、实现的对象,单一的参与者不可能构成分布式对象。
分布式对象是很诱人的,因为开发者能够基于网络构建应用。在开发大型的分布式对象应用的时候,需要借助于中间件
服务,如事务和安全性。
远程对象:
(1)、企业Bean的业务逻辑需要在Bean类中实现。EJB规范定义了企业Bean类待实现的若干接口。这些接口使得所有的企
业Bean类能够暴露同一套接口。各种企业Bean的Bean类都需要实现javax.ejb.EnterpriseBean接口。
当然,EJB规范分别为会话Bean、实体Bean和消息驱动Bean提供了更专属的接口类型,
SessionBean,EntityBean,MessageDriverBean.
(2)、当客户使用企业Bean类的某实例时,它并不是直接调用Bean类的方法,EJB容器将拦截客户调用,然后委派给企业
Bean实例。通过拦截客户请求,EJB容器能够自动操作隐式中间件服务。
因此,在客户和EJB组件间,引入了间接层,即EJB容器。引入的间接层将自身封装为单一的网络使能对象,即EJB对象,
EJB对象正是请求拦截器。EJB对象是代理对象,它可以与网络、事务、安全性等进行交互。企业Bean客户调用EJB对象提供的
方法,而不是企业Bean本身。因此,EJB对象必须复制企业Bean类暴露的业务方法。但是,自动生成EJB对象的工具是怎么知
道业务方法的呢?答案是,通过企业Bean提供者提供的接口来实现,即远程接口。这个接口复制企业Bean类暴露的业务方法。
EJB容器负责管理EJB组件,通过调用EJB组件提供的回调方法,EJB容器能够同EJB组件交互。这些回调方法仅供EJB容器管理
EJB组件使用。
EJB容器最为重要的一项工作是,提供EJB组件运行的环境。EJB容器宿主了EJB组件,从而供远程客户调用。因此,可以
认为EJB容器充当了客户和EJB组件的中间人。EJB容器负责将客户连接到EJB组件,完成事务协调工作,提供持久化能力,管
理EJB组件的声明周期及其他任务。
EJB的远程接口还需复制企业Bean类的业务方法。一旦企业Bean客户调用业务方法,EJB对象将把调用操作委派给相应的
Bean类。
(3)、Java RMI-IIOP和EJB对象:javax.ejb.EJBObject继承于java.rmi.Remote.任何实现了Remote接口的对象都是远程
对象,即能够从其他JVM中访问到它,这就是Java实现RMI方式。由于容器提供的EJB对象实现了EJB组件的远程接口,因此EJB
对象也间接实现了java.rmi.Remote接口。EJB对象是具有完整网络功能的RMI-IIOP对象,供其他JVM或者网络中其他物理机器
访问。实际上,EJB远程接口仅仅是RMI-IIOP远程接口,只不过它还遵循EJB规范罢了。
远程接口还必须遵从RMI-IIOP的参数传递约定。并不是所有的内容都能够跨越JVM传递的。方法中传递的参数必须是符合
RMI-IIOP约定的有效Java类型,如Java原型、序列化对象和RMI-IIOP对象。
总之,EJB容器需要负责权衡资源管理和管理已部署EJB组件的生命周期。
posted on 2009-10-28 15:39
王永庆 阅读(254)
评论(0) 编辑 收藏 所属分类:
EJB学习笔记