• 测试开发进阶——常用中间件概念——会话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是异步地处理消息的。

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

  • 相关阅读:
    深入浅出Vue.js(四) 整体流程
    深入浅出Vue.js(三) 模板编译
    实现strStr()--indexOf()方法
    Z字形变换
    最长回文子串
    删除数组中不符合条件的值
    整数反转
    寻找两个正序数组的中位数
    gorm 关系一对一,一对多,多对多查询
    gorm 如何对字段进行comment注释?
  • 原文地址:https://www.cnblogs.com/xiaobaibailongma/p/15334299.html
Copyright © 2020-2023  润新知