【正确答案】
【答案解析】EJB是Enterprise JavaBean的简称,相当于分布式组件对象模型(Distributed Component Object Model,DCOM),它是一种服务器端组件体系结构,用于开发和部署多层的、分布式的以及面向对象的应用系统的跨平台体系结构。EJB简化了Java开发企业级的分布式组件应用程序的过程,它定义了一组可重用的组件——Enterprise Beans,开发人员可以利用这些组件,像搭积木一样建立各种分布式应用。所以,使用EJB可以写出可扩展的、健壮的、安全的应用程序,而不需要开发人员自己去编写复杂的分布式组件框架。
依据特性的不同,EJB可以分为以下3种类型:Session Bean(会话Bean),Entity Bean(实体Bean)和Message Driven Bean(消息驱动Bean)。下面将分别对这3种Bean进行介绍。
(1)Session Bean
Session Bean用来实现服务器端的业务逻辑,同时协调Bean之间的交互。Session Bean仅存在于客户应用与服务器交互的时间段内,Session Bean中的数据是不保存在数据库中的。根据Session Bean是否有状态又可以分为两种类型:Stateless Session Bean(无状态的Session Bean)和Stateful Session Bean(有状态的Session Bean)。
Stateless Session Bean在方法调用期间不维护任何状态,所有事务处理都是在一个方法中处理完成,因此一个Stateless Session Bean可以被多个客户共享,即一个Stateless Session Bean可以同时处理多个客户应用的请求;而Stateful Session Bean则不同,它可以记录客户应用请求的状态,例如在线购物系统中,每个客户都拥有购物车(Stateful Bean),而装载的货物和货物的数量在Session Bean中通过方法来操作,因此每个Stateful Session Bean只能处理一个客户的请求。与Stateless Session Bean相比,Stateful Session Bean的优点是能够记录客户应用的状态,其缺点是它不能被共享,开销较大,性能逊于Stateless Bean,因此当请求用户数量比较多时会消耗更多的内存。
(2)Entity Bean
Entity Bean主要是资料组件,代表数据库中的记录,因此它与数据库中的数据有着相同的生存周期,也就是说,只要数据库中的数据存在,Entity bean就一直存在。此外,Entity Bean还可以被多个客户应用共享。Entity有两种对数据持久化的处理方式:①CMP(Container Managed Persistence,容器管理的持续性)。构件的相关数据库操作由容器自动完成,不需要在bean中编写数据库操作的代码。②BMP(Bean Managed Persistence,Bean管理的持续性)。构件的相关数据库操作由开发人员在代码中通过JDBC编程来实现。这两种Entity Bean的形态不同,但目的相同,二者的主要区别在于维护资料的角色,CMP是由EJB Container来维护,而BMP则是由Bean自行维护资料的一致性。
Entity Bean一共有3种状态:no-state、pooled和ready。其中,no-state状态表示Bean实例还没有被创建;pooled状态表示Bean实例已经被创建,但还没有和一个EJB Object关联起来;ready状态表示与EJB Object关联起来,若断开关联,则回到pooled状态。
(3)Message Driver Bean
Message Driver Bean用来处理异步消息,一般不是由用户来调用的。它的调用方式为:当有异步消息发送到某个Message Driver Bean后,容器会负责调用Message Driver Bean的OnMessage()方法来处理这个异步请求。