快捷搜索:

J2EE从零开始之企业Beans(EJB)简介

上一章经由过程开拓一个简单的企业Bean,对EJB有了一个初步的熟识,本章进一步评论争论EJB技巧体系的主要几个方面,阐述诸如EJB组件、EJB角色、EJB类型、持久性、EJB合约等基础观点。使读者对EJB技巧有加倍深入的懂得。

企业Bean(Enterprise JavaBeans,EJB)规范由SUN公司和其它伙伴公司制订,1.0版本在1998年3月宣布。1.1版本在1999年12月宣布。近来的版本是2.0,于2000年10月宣布。可以从网址http://java.sun.com/products/ejb/docs.html下载该规范。

本章以Enterprise JavaBeans(EJB)规范2.0版为主要参考,从多个侧面先容EJB的基础观点。

3.1 EJB组件

企业Bean技巧从本色上说是一个基于组件的散播式谋略架构体系规范。企业Bean是散播式的面向营业逻辑的企业利用组件。

基于组件的利用要领是把传统上的利用系统按必然的目标分成两个部分:容器和组件。这种划分更多的是从功能启程的,划分的原则把底层技巧细节与利用逻辑分开。容器部分重点在于办理底层的技巧问题,如目录造访、散播式事务处置惩罚、安然治理、并行造访、持久性治理、资本池治理、系统治理界面和负载均衡等方面。组件部分重点放在详细的利用逻辑上。同时,这样划分也把不合性子的开拓事情分离出来。具有不合技巧背景的开拓职员关注于系统的某一个层面而无需对其他层面深人的懂得。一旦这种划分成为了一个技巧标准,那么就形成了相关的技巧领域的社会工业。

3.1.1 EJB组件的特点

企业Bean的紧张特点如下:

·企业Bean包括操作企业数据的营业逻辑。企业Bean是用来封装营业逻辑的。

·企业Bean的实例被容器创建和运行。容器治理EJB。

·企业Bean在支配的时刻经由过程编辑情况属性来定制。应用支配描述符是支配EJB的紧张环节。

·不合的办事信息,如事务和安然属性,从企业Bean类平分离出来。这些通用的办事由容器一次完成。开拓不合的利用时,不必再斟酌这些啰唆的细节问题。用一些对象在利用法度榜样装置和支配历程中治理办事信息。

·客户端造访支配在容器的组件是快速进行的。容器经由过程应用资本池等手段显明前进了机能。

·假如一个企业Bean仅应用EJB规范定义的办事,它能被支配在任何一个兼容的EJB容器中。特定的容器能供给EJB额外的办事。依附这样办事的企业Bean只能支配在支持这个办事的容器中。EJB规范是个通用的规范,获得很多厂商的支持,确保了EJB的可移植性。

·企业Bean能被包孕在一个已装置的利用法度榜样中,而不需源代码的改变或从新编译。具有优越的重构性、可进级特性。

·Bean供给者定义一个企业Bean的客户端视图。Bean供给者可以手工定义客户端视图或经由过程法度榜样支配对象自动孕育发生。客户端视图不受Bean支配的容器和办事器的影响。这确保了Bean和它们的客户端能被支配到多种履行情况中而不需改变或从新编译。

3.1.2 EJB组件的类型

企业Bean架构是机动的,可以实现下列组件:

·表示一个无状态办事的工具。即无状态会话EJB。

·表示一个无状态办事工具且是异步引发的,被Java消息办事(JMS)的消息驱动。即消息驱动Bean。

·表示一个特定客户真个会话状态的工具。如会话工具在客户端多次调用之间自动保持它们的会话状态。即有状态会话Bean。

·实体工具表示商业逻辑工具,被多个客户端共享。即实体Bean。实体Beans用来描述较粗拙的逻辑工具(如订单、雇员记录等)。不太得当描述较具体的工具(如订单上的项、雇员地址等)。

EJB的状态是个较紧张的观点。这里的状态是在EJB的客户端视图定义的,也便是说EJB的状态指的是EJB出现的客户真个状态,而并不是指EJB本身的生计状态,这两者每每并不完全同等。

虽然EJB定义的状态治理协议简单,它为开拓者供给了一个在治理状态上的企业Bean极大年夜的机动性。

3.1.3 企业 Beans组件利用模型

J2EE三层利用架构定义了两种基于组建的利用模式,即Web利用和EJB利用。如表3-1所示。

表3-1 Web利用与EJBs利用比较

─────────────────────────────────

Web利用      EJBs利用

─────────────────────────────────

组件    Servlets(Jsps)   EJBs

容器    包孕在Web办事器中  在利用办事器中

通信协议  Http        Java RMI,CORBA IIOP,

Microsoft DCOM等

─────────────────────────────────

这里我们斟酌EJBS利用的环境(Web利用在第7、8章评论争论)。

如图3-1所示是EJB组件运行架构图。图中心的部分包括EJB容器和支配在容器中的组件(即EJB)。图左边的部分是EJB的客户端。图中共示意了四种客户端。EJB还有一种紧张的客户端类型,便是EJB本身。也便是说,一个EJB组件可以作为另一个EJB组件的客户端。这种环境在企业级利用中是很常见的。

客户端也可以简单的分成两种:即Java客户端和非Java客户端(比如C/C++)。对Java客户端来说,传输协议可以采纳 Java远程措施调用(Java RMI)要领,也可所以IIOP协议,而对非Java客户端来说,只能采纳IIOP协议。

3.2 EJB角色

环抱EJB利用(包括组件和容器)的开拓和支配周期,EJB规范为EJB架构定义了七个角色,每个角色由不合的单位承担。EJB规范经由过程定义角色者之间的“合约”,来确保角色间的精确协作。在某些时刻,某个组织可以同时具有多个角色。比如某个公司会供给包孕EJB办事器和容器的产品,那么它同时充当着EJB办事器供给者和容器供给者两种角色。是以,这种角色划分并不是绝对的。

以下是EJB规范2.0中定义的EJB角色。

1.EJB供给者

EJB供给者,即EJB的开拓者。对付多半企业级利用开拓者来说,都属于这个角色。EJB供给者的产品是个包孕一个或多个EJB的打包文件(即ejb-jar文件)。EJB供给者认真营业逻辑措施的 Java说话实现;定义EJB的远程和主接口措施和EJB的支配描述符。支配描述符包括EJB的布局信息(如EJB类的名字)和EJB用到的其它所用资本的描述信息。

EJB供给者是个利用领域的专家。认真开拓实现营业义务和逻辑实体的可重用的EJB。不必是系统级的法度榜样专家,也不必斟酌法度榜样的事务并发性、安然性、散播性等问题,这些问题都是由容器办理的。

2. EJB利用装置者

利用装置者把EJB装置成更大年夜的可支配的利用单元。无意偶尔这个事情也由EJB供给者完成。EJB装置者的输入是EJB供给者临盆的一个或多个ejb-jar文件,输出是一个或多个包孕EJB和利用装置信息的ejb-jar文件。前者ejb-jar文件的扩展名一样平常是JAR(Java Archive),后者ejb-jar文件的扩展名可所以WAR(Web Application Archive)或EAR(Enterprise Application Archive)。利用装置者把利用装置信息插入到支配描述符中。

利用装置者也可以把其它利用类型的组件(如JSP,JavaServerPage)装置到EJB利用中(这就象在PetStore例子中看到的那样)。

利用装置者事情的工具是EJB支配描述符和EJB客户端视图合约。虽然他必须认识EJB的远程接口和主接口,但他不必具有任何实现EJB开拓的常识。

3.EJB支配者

支配者把从EJB供给者和利用装置者那里获取的一个或多个ejb-jar文件中EJB支配到一个指定的情况。无意偶尔这个事情也由EJB供给者完成。这个情况包括特定的EJB办事器和容器。

支配者平日会应用EJB容器供给者供给的支配对象(如 WebLogic Server供给的weblogic.ejbc对象),来为EJB供给必要的外部资本并绑定这些资本,同时必须相符利用装置者定义的指令。

支配者的产品是定制到特定情况的EJB,这个产品只能被支配在那个特定的容此中。也便是说,EJB的支配是与办事器平台相关的。

支配者是利用情况的操作专家,认真与EJB支配相关的事情。如:他认真把利用装置者定义的安然角色和EJB支配情况中的用户组及账号对应起来,实现它们的映射。

EJB容器供给者供给的支配对象用来完成支配事情,这个历程分两个阶段:

(1)支配者首老师成附加类和接口,确保容器能治理EJB的运行。这些附加的类是和特定容器相关的。

(2)支配者完成EJB和附加类及附加接口的安装。

4. EJB办事器供给者

EJB办事器供给者,即临盆EJB办事器的厂家。今朝相符EJB规范的办事器产品有十几种,如 WebLogic Server,Websphere,iPlanet等。EJB办事器供给者是散播式事务、散播式工具和其它初级系统级办事的专家。一个范例的EJB办事器供给者可能是操作系统临盆者、中心件临盆者或数据库临盆者。

今朝EJB架构假定EJB办事器供给者和EJB容器供给者是同一个临盆者,是以没有定义EJB办事器供给者的任何接口需求。

5. EJB容器供给者

容器供给者供给了:

(1)支配EJB必要的支配对象。

(2)EJB的运行情况。

从EJB的角度看,容器是EJB的运行情况。容器为EJB供给了事务治理、安然治理。散播式收集治理、资本治理等办事。

EJB架构定义的EJB容器供给者认真EJB容器和EJB办事器的实现。EJB规范没有定义EJB容器和办事器之间的接口,由厂家来实现EJB容器和办事器的划分。

容器供给者必要系统级的编程,容器供给者的重点是开拓出可伸缩的、安然的、事务处置惩罚的容器,并把它集成到EJB办事器中。容器供给者把EJB和EJB办事器分分开,并在EJB和容器之间供给了简单、标准的API。这个API便是EJB的容器合约。

容器供给者平日会供给容许系统治理员监视和治理容器和运行在容器中的EJB的对象。

平日把具有EJB容器、EJB办事器和Web办事器功能的产品叫做利用办事器。它为开拓企业级利用供给了一个完备的平台。

6. 治理器供给者

在EJB的应用和开拓中,常常会碰到持久性的观点。所谓持久性,是指经由过程帮助的永远性的存储设备,如数据库或文件等,把Java工具的状态和对应的存储设备映射起来,当Java工具的状态发生改变时,存储的映射也随之改变。纵然在Java工具消掉后,存储设备中依旧保存着Java工具的状态。当这个Java工具从新实例后,它就会依然维持曩昔的状态,这便是Java工具的持久性。

在EJB规范中定义了具有持久性的EJB——实体EJB。根据对持久性治理要领的不合,又把实体 EJB分成容器治理持久性的 EJB(CMP EJB)和Bean治理持久性的EJB(BMP EJB)。

一样平常环境下,持久性治理器包孕在容器治理器中。对付EJB供给者来说,不必懂得它的细节。

对付容器治理持久性的实体EJB来说,持久性治理器认真安装在容器内的实体EJB的持久性治理。在支配阶段应用持久性治理器供给者的对象,可以天生代码,实现数据从实体EJB到数据库和利用法度榜样的转换。

容器治理器治理实体Bean及其用到的工具的持久性和这些工具引用的完备性。容器治理器认真容器治理持久性实体EJB的finder措施和select措施的履行。

今朝的EJB架构中没有完备定义容器和持久治理器间的接口,由厂家来自行定义。

7.治理者

系统治理者认真设置设置设备摆设摆设、企业级谋略、包括EJB办事器和容器的收集举措措施的系统治理。同时,系统治理者监视支配在容器中的EJB的运行。

EJB架构没有为系统治理定义合约。系统治理平日应用EJB办事器和容器供给者供给监视治理对象来完成这些事情。

平日,利用办事器会供给系统治理的节制台对象(如 WebLogic Server中的 Console)。

3.3 EJB合约

这里的合约是指不合EJB角色相助的约定,也是不合角色的开拓者开拓的产品要遵守的约定。对付EJB供给者即开拓者来说,要遵守客户端视图合约;对付EJB容器的开拓者和应用者来说,要遵守组件和约。本节对这两个合约进行评论争论。

在EJB开拓历程中,这些合约的表现是EJB开拓接口和一些EJB内部工具。

1. 客户端视图合约

是客户端与容器之间的合约。客户端视图合约为应用企业Beans作为组件开拓利用法度榜样供给一个统一的开拓模式。这个统一的模型使应用高档的开拓对象成为可能,并实现组件重用。企业Bean客户端视图是基于远程造访的,它容许本地和远程工具采纳统一的要领进行造访。

一个企业Bean的客户端可能是支配在同一个或不合容器的另一个企业Bean。也可所以任何一个Java法度榜样,如利用法度榜样、Applet或Servlet。一个企业Bean的客户端视图也可以被映射到非Java客户端,如CORBA客户端。它不是由JavaTM编程说话写的。企业Bean供给者和容器供给者一同供给企业Bean的客户端视图。客户端视图包括:

·主程接口(Home Interface)

·远程接口(Remote Interface)

·工具识别(Object Identity)

·元数据接口(Metadata Interface)

·句柄(Handle)

主接口(Home Interface):定义创建、删除和查找同类 EJB工具的措施(即它们由同一个企业Bean实现)和主营业逻辑措施(即不是特定某个Bean实例的措施)。主接口由Bean供给者制订;容器创建一个类来实现主接口。主接口承袭javax.ejb.EJBHome接口。

客户端经由过程标准的Java名称和目录接口(Java Naming and Directory Interface TM,JNDI)API定义企业Bean主接口。

EJB工具是经由过程远程接口(Remote Interface)来造访的。远程接口定义了客户端调用的营业逻辑措施。远程接口由Bean供给者拟订;容器创建一个类来实现远程接口。远程接口承袭了javax.ejb.EJBObject接口。javax.ejb.EJBObject接口定义了容许客户端访EJB工具标识和EJB工具创建一个持久性句柄的操作。

每个EJB工具在主域里存活,并有一个惟一的标识。对 Session Beans来说,容器认真为每个Session工具孕育发生新的惟一标识。这个标识并没有裸露给客户端。然而,客户端可以测试两个工具引用是否指向同一个Session工具。对实体EJB来说,Bean供给者认真在Entity工具创建的时刻供给一个主键;容器应用主键来在主域中标识实体工具。客户点可以经由过程javax.ejb.EJBObject接口获取一个实体工具的主键。客户端也可以测试两个工具引用是否指向同一个实体工具。

客户端也可以获取企业Bean的元数据接口。客户端应用元数据接口主要用在履行企业Bean的动态调用上。(供给客户端视图的类弗成用的时刻必要动态调用)。

消息驱动Beans没有Home和Remote接口,是以它没有客户端视图。客户端可以经由过程标准JNDI API定位发到消息驱动Bean的消息所在的JMS目标。

2. 组件合约

这部分描述企业Bean和它的容器之间的合约,以及在容器治理持久性的企业Bean环境下,企业Bean和它的持久治理器之间的合约。主要的合约如下(部分):

·必要Bean供给者实现企业Bean类中的营业措施。必要容器供给者供给客户端调用这些措施的代理。

·对付消息驱动Beans来说,必要Bean供给者实现企业Bean类中的onMessage措施。必要容器供给者调用这些措施。

·假如Bean是实体并且是Bean治理持久性(BMP)的,必要Bean供给者实现ejbCreate措施ejbPostCreate措施、ejbRemove措施和ejbFind措施。必要容器供给者在EJB工具的创建、删除和查询的历程中调用这些措施。

·对付容器治理的持久性,必要Bean供给者为持久属性供给抽象的造访措施和一个实体与容器治理持久性的关系。必要持久治理供给者供给这些措施的实现。

·必要Bean供给者供给持久性治理器实现的关系描述。

·必要Bean供给者定义企业Bean的主接口和远程接口,假如是实体Bean或Session Bean,必要Container供给者供给实现这些接口的类。

·对会话来说,必要Bean供给实现javax.ejb.SessionBean接口或在javax.ejb.SessionSynchronization接口中定义的容器回调。必要容器治理者在适当的时刻调用这些回调。

·对消息驱动Beans来说,必要Bean供给者实现定义在接口javax.ejb.MessageDrivenBean中的容器回调。

·对实体EJB来说,必要Bean供给者实现定义在javax.ejb.EntityBean中的容器回调。必要容器在适当的时刻调用这些回调。

·必要持久治理器供给者实现实体Beans的持久性。

·必要容器供给者为会话bean实例供给javax.ejb.SessionContext接口,为实体bean实例供给javax.ejb.EntityContext接口,为消息驱动bean实例供给javax.ejb.MessageDrivenContext接口。高低文接口容许实例获取容器的信息。

·必要容器为Bean实例供给JNDI高低文,它包孕企业Bean的情况信息。

·必要容器为企业Bean实例治理事务、安然和非常。

·必要Bean供给者避免法度榜样影响企业Bean实例的容器运行时治理。

3. ejb-jar文件

一个ejb-jar文件具有标准的款式。EJB对象用它来作为描述性的说话打包企业Beans。ejb-jar文件用来履行法度榜样的装置和支配。

ejb-jar文件包括:

·企业Beans的Java类文件和它们的远程和主接口。

·XML支配描述符。支配描述符供给关于在ejb-jar文件中的企业Beans的布局和装置信息。

4. 合约总结

如图3-2描述了EJB的合约。

留意 图3-2只显示远程客户端运行在Container外的环境,客户端视图API也可以用在同一个容器中的企业Beans。

3.4 会话、实体和消息驱动Bean工具

EJB架构定义了三种类型的企业Bean工具:

·会话工具(Session Obect)

·实体工具(Entity Obect)

·消息驱动工具(Message-Driven Object)

1. 会话工具(Session)

一个范例的会话工具具有如下特性:

·由一个客户端履行。

·自动事务感知。

·在一个潜在的数据库中更新共享数据。

·不直接表示数据库中的共享数据,虽然它可以造访和更新这些数据。

·相对来说是夭折的。

·当EJB容器竣过后被清除掉落。客户只能从新建立新的工具来继承谋略。

一个范例的EJB Containe供给一个机动的运行情况来并发的履行大年夜量的会话工具。

会话Beans是有状态的。同时EJB规范也支持无状态会话Bean作为一个特殊的环境。有状态(正常)会话Beans和无状态会话Bean的API有很小的区别。

2. 实体工具(Entity)

一个范例的实体工具有如下特性;

·供给一个数据库的数据视图。

·允许多个用户共享造访。

·存活光阴长(和数据库中的数据一样)。

·实体,主键和远程引用可以在EJB容器竣过后存活。假如实体的状态被事务更新,同时容器竣事,实体的状态自动地从新置为着末一次触发事务的状态。竣事对付客户端来说不是完全透明的,在它调用一个实体容器崩溃的时刻,客户端可能会收到一个非常。

特殊的EJB容器和办事器为多个并发的实体工具供给一个可变的运行时情况。

3. 消息驱动工具

一个范例的消息驱动工具具有如下特性:

·收到某个客户端消息时履行。

·自动事务感知。

·自动更新共享数据。

·不直接代表数据库中的共享数据,虽然它可以造访和更新这些数据。

·生命短。

·无状态。

·EJB容器崩溃时被删除。容器不得不从新建立新的消息驱动工具来继承谋略。

一个范例的EJB容器供给一个机动的运行情况来同时履行多个消息驱动工具。

3.4 会话、实体和消息驱动Bean工具

EJB架构定义了三种类型的企业Bean工具:

·会话工具(Session Obect)

·实体工具(Entity Obect)

·消息驱动工具(Message-Driven Object)

1. 会话工具(Session)

一个范例的会话工具具有如下特性:

·由一个客户端履行。

·自动事务感知。

·在一个潜在的数据库中更新共享数据。

·不直接表示数据库中的共享数据,虽然它可以造访和更新这些数据。

·相对来说是夭折的。

·当EJB容器竣过后被清除掉落。客户只能从新建立新的工具来继承谋略。

一个范例的EJB Containe供给一个机动的运行情况来并发的履行大年夜量的会话工具。

会话Beans是有状态的。同时EJB规范也支持无状态会话Bean作为一个特殊的环境。有状态(正常)会话Beans和无状态会话Bean的API有很小的区别。

2. 实体工具(Entity)

一个范例的实体工具有如下特性;

·供给一个数据库的数据视图。

·允许多个用户共享造访。

·存活光阴长(和数据库中的数据一样)。

·实体,主键和远程引用可以在EJB容器竣过后存活。假如实体的状态被事务更新,同时容器竣事,实体的状态自动地从新置为着末一次触发事务的状态。竣事对付客户端来说不是完全透明的,在它调用一个实体容器崩溃的时刻,客户端可能会收到一个非常。

特殊的EJB容器和办事器为多个并发的实体工具供给一个可变的运行时情况。

3. 消息驱动工具

一个范例的消息驱动工具具有如下特性:

·收到某个客户端消息时履行。

·自动事务感知。

·自动更新共享数据。

·不直接代表数据库中的共享数据,虽然它可以造访和更新这些数据。

·生命短。

·无状态。

·EJB容器崩溃时被删除。容器不得不从新建立新的消息驱动工具来继承谋略。

一个范例的EJB容器供给一个机动的运行情况来同时履行多个消息驱动工具。

3.4 会话、实体和消息驱动Bean工具

EJB架构定义了三种类型的企业Bean工具:

·会话工具(Session Obect)

·实体工具(Entity Obect)

·消息驱动工具(Message-Driven Object)

1. 会话工具(Session)

一个范例的会话工具具有如下特性:

·由一个客户端履行。

·自动事务感知。

·在一个潜在的数据库中更新共享数据。

·不直接表示数据库中的共享数据,虽然它可以造访和更新这些数据。

·相对来说是夭折的。

·当EJB容器竣过后被清除掉落。客户只能从新建立新的工具来继承谋略。

一个范例的EJB Containe供给一个机动的运行情况来并发的履行大年夜量的会话工具。

会话Beans是有状态的。同时EJB规范也支持无状态会话Bean作为一个特殊的环境。有状态(正常)会话Beans和无状态会话Bean的API有很小的区别。

2. 实体工具(Entity)

一个范例的实体工具有如下特性;

·供给一个数据库的数据视图。

·允许多个用户共享造访。

·存活光阴长(和数据库中的数据一样)。

·实体,主键和远程引用可以在EJB容器竣过后存活。假如实体的状态被事务更新,同时容器竣事,实体的状态自动地从新置为着末一次触发事务的状态。竣事对付客户端来说不是完全透明的,在它调用一个实体容器崩溃的时刻,客户端可能会收到一个非常。

特殊的EJB容器和办事器为多个并发的实体工具供给一个可变的运行时情况。

3. 消息驱动工具

一个范例的消息驱动工具具有如下特性:

·收到某个客户端消息时履行。

·自动事务感知。

·自动更新共享数据。

·不直接代表数据库中的共享数据,虽然它可以造访和更新这些数据。

·生命短。

·无状态。

·EJB容器崩溃时被删除。容器不得不从新建立新的消息驱动工具来继承谋略。

一个范例的EJB容器供给一个机动的运行情况来同时履行多个消息驱动工具。

3.5 CORBA协议的标准映射

为了实现不合系统的EJB情况间的协作,EJB 2.0规范必要会话Beans和实体Beans的J2EE客户调用端支持基于CORBA/IIOP协议兼容的实现。

3.6 本章小结

对付本章阐述的观点,读者弗成能在看过一次后完全领会。本书后面几章供给了大年夜量的EJB利用的实例,读者在实际操作完这些例子后再从新理解这些观点会取得更好的效果。

下一章评论争论会话EJB的特性、编程模型和实例开拓。

您可能还会对下面的文章感兴趣: