测试开发进阶——常用中间件概念——会话Bean(SessionBean),实体Bean(Entity Bean)、消息驱动Bean(MessageDriven Bean)——EJB三种企业Bean的理解

EJB——EnterpriceJavaBeans:是一个用于分布式业务应用的标准服务端组件模型。

采用EJB架构编写的应用是可伸的、事务性的、多用户安全的。可以一次编写这些应用,然后部署在任何支持EJB规范的服务器平台,如JBoss、WebLogic。

EJB定义了三种企业Bean——会话Bean(SessionBean),实体Bean(Entity Bean)、消息驱动Bean(MessageDriven Bean)

1,Session Bean:Session Bean 用于实现业务逻辑,比如用户注册、信息记录、数据操作等

它分为有状态Bean和无状态Bean。

每当客户端请求时,容器就会选择一个Session Bean来为客户端服务。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。

什么叫会话(Session)?

从客户端获得EJB对象开始,然后调用EJB的方法(可以多次),直到客户端生命周期结束,或客户端释放了EJB对象为止,称为一次会话。

随着会话的终止,EJB对象也有可能会被EJB容器销毁。

下图,Session Bean通过Entity Bean往数据库插入一条记录

2,实体Bean:从名字上我们就可知,实体Bean代表真实物体的数据,在JDBC+JavaBean编程过程中,通常把JDBC查询的结果信息存入JavaBean,然后供后面程序进行处理。

在这里你可以把实体Bean看作是用来存放数据的JavaBean。

但是比JavaBean多了一个功能,实体Bean除了担负起存放数据的角色,还要负责跟数据库进行对象与关系映射(O/R Mapping)

我目前的理解:实体Bean,挺好理解的就如同学习.net三层架构时的实体层(Entity),存放实体类,贯穿于整个架构。

而实体Bean多了一个功能:负责跟数据库进行对象与关系映射(O/R Mapping)

下图,对象与关系映射

3,消息驱动Bean(MDB):是设计用来专门处理基于消息请求的组件。

它能够收发异步JMS消息,并能够轻易地与其他EJB交互。它特别适合用于当一个业务执行的时间很长,而执行结果无需实时想用户反馈的这样一个场合。

===============================================

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是异步地处理消息的。

===================================================================

原文地址:https://www.cnblogs.com/xiaobaibailongma/p/15334299.html