EJB规范的三种Bean

来源:互联网 发布:取个好听的淘宝店名 编辑:程序博客网 时间:2024/05/09 02:00

EJB规范中定义了三种Bean,他们分别是会话Bean(Session Bean),实体Bean(Entity Bean),消息驱动Bean(MessageDrive Bean)。这三种Bean各自有各自的特点,并且他们分别应用于不同的情况,下面我们将就这三种Bean进行较为详细的介绍。

1.      会话Bean。一个会话bean表示的是应用服务器中的单个客户程序,它被用来实现一个具有特定客户业务逻辑的事务对象。我们可以简单的理解为一个会话Bean完成一个用户功能。也正是因为多个用户可能在相同的时间执行相同的功能,并且每个用户执行相同功能后所返回的结果可能是不一样的,所以每个会话Bean只能特定的属于一个客户程序,但是会话Bean不是持久的,当一个客户程序终止的时候,会话Bean的生命周期就结束了,与客户程序再无关联。会话Bean有根据是否为特定的客户程序保存状态分为有状态的会话Bean和无状态的会话Bean。

a)        有状态的会话Bean 是客户应用程序的扩展。代表客户程序执行任务并维护该程序的相关状态,该状态称为会话状态。在有状态会话Bean中调用的方法既可以从该会话状态中读取数据,也可以将数据写入该状态中。并且本次会话的状态由该会话Bean调用的所有方法共享。那么什么是有状态会话Bean的的状态呢?有状态会话Bean的状态是由该会话Bean实例中的变量组成的,该状态在客户程序和Bean进行会话期间被保持,如果客户程序终止,则会话终止,状态也就消失了。

b)        无状态会话Bean不为特定的客户程序保持会话状态。它仅仅是一组类似于批处理的批处理的相关服务,每一服务由一个方法来表示。当我们调用无状态会话Bean的方法时,它执行该方法并返回结果,而无需知道或关心在此之前或之后发生了和中其他情趣,其状态也仅仅在方法调用的时候存在(有状态的会话Bean的状态是会话进行过程中存在而不是在方法调用过程中存在),当方法完成后其状态就不再被保存了。

2.      实体Bean是可以存储在持久存储介质上的持久对象。实体Bean常用来表示永久性数据并提供操作这些数据的方法。一般情况下一个实体Bean对应着数据库中的一张表,而一个实体类的实例对应着这张表中的一条记录。

实体Bean和会话Bean的最大区别在于实体Bean具有持久性,允许共享访问和主键的特性。实体Bean的状态保存在数据库中,可以被多个客户程序共享,每个实体Bean都有一个成为主键的唯一对象标识。

3.      消息驱动Bean。消息驱动Bean允许J2EE应用程序异步的接收Java消息服务(JMS)的消息。消息驱动Bean包含处理接受到的消息的事务逻辑,主要作用是处理消息。它与其他Bean(实体Bean和会话Bean)的区别主要在于以下几点:

a)        消息驱动Bean没有任何接口,客户程序不是通过接口来访问消息驱动Bean的,它处理的消息可以来自任何消息客户程序。

b)        消息驱动Bean类似于无状态会话Bean,是没有状态的,它的实例不保持特定客户程序的会话状态。

c)        消息驱动Bean不需要返回任何数值给他的客户程序,也不能向客户程序返回异常,因为消息驱动Bean是异步地处理消息的。