介绍一下EJB的分类及其各自的功能及应用


Posted in 面试题 onAugust 23, 2016
在EJB2.0中定义了三种不同类别的EJB:Session Bean(会话Bean)、Entity Bean(实体Bean)和Message-Driven Bean(消息驱动Bean)[2]。

1 会话Bean
会话Bean是商务过程对象,执行商务逻辑、规则和工作流程。会话Bean之所以被称为会话Bean,是因为它代表的是一个动作、是一个过程,它的生存期就是调用它的客户端与它进行会话的过程。

会话Bean根据其是否保存客户的状态,又分为状态会话Bean和无状态会话Bean。状态会话Bean是一种保持会话状态的服务,每个实例都与特定的客户机相关联,在与客户机的方法调用之间维持对话状态。与之相反,无状态会话Bean不保存与特定客户的对话状态。因此状态会话Bean比无状态会话Bean具有更多的功能,而无状态会话Bean实例可以通过 EJB容器自由地在客户机之间交换,从而少量的会话Bean就可以服务于大量的客户机。

2 实体Bean
实体Bean代表商务上的实体,比如商务数据,应该包含与数据相关的逻辑。实体Bean是对应到数据库中的一个视图,一个实体Bean实例和底层数据库完全是一回事[2]。因此,一个简单的实体bean实例代表一个特殊的记录。更复杂的实体bean可以代表数据库表间关联视图[3]。

实体Bean有两种操作类型:BMP(Bean管理持久性)和CMP(容器管理持久性)。BMP是指由Bean自己来实现实体Bean的持久性,即在Bean中实现数据库操作。而CMP则是由容器实现Bean的持久性,使我们不需要在Bean内再编写数据库操作的代码。

3 消息驱动Bean
消息驱动Bean是EJB2.0新引入的一种Bean类型。它的主要目的是,通过允许容器去聚合并且管理消息驱动Bean实例,以此来提供传入JMS消息的并发处理[4]。

4 会话Bean与实体Bean的区别和联系
会话Bean执行应用逻辑,它们隐含地使用实体Bean作为它们操作的数据。在EJB分布式对象体系结构中,会话Bean被用做代表实际商务过程的高层接口来屏蔽底层实体Bean子系统。实体Bean是实际恒定商务实体的模型,因此它通常比会话Bean具有更高层次的重复使用。

5 EJB的应用
接下来,通过分析电子购物环节的业务逻辑层的对象模型来说明各种EJB在业务逻辑层中的不同应用。
业务逻辑层包含了一系列EJB组件。首先我们将其抽象成若干个对象模型,如图所示:
图:对象模型图
本图首先反映了电子商务中各EJB组件之间的静态关系。
由多个购物篮条目(Cart Line Item)组成的一个购物篮(Cart)为一个顾客 (Customer)存储产品的临时选择;由多个订单条目(Order line Item)组成的一个订单(Order)为一个顾客存储产品的永久选择。购物篮能将自身转换为订单。

一个购物篮条目代表一个产品(Product)的临时选择,一个订单条目代表一个产品的永久选择。
估价器(Pricer)在顾客查看购物篮时计算购物篮的价格,并且在顾客最终生成订单时计算订单的价格。
订单处理器(Order Processor)为订单验证信用卡,发送E-mail确认,并标识为永久。
同时从本图中也可以了解一个电子购物的过程:首先,在购物时顾客把自己感兴趣的产品放入购物篮中,同时由估价器对购物篮进行及时估价。然后,顾客在确认购买后,购物篮能自动生成订单。再由估价器计算出订单的价格。接着,由订单处理器验证顾客信用卡的合法性,在交易完成后为顾客发送E-mail确认交易成功,并将本交易标识为永久。
顾客、订单、产品、订单条目这几个对象是永久性、持续性对象,例如,顾客信息、产品信息都需要存入数据库,并且在适当的时候从数据库中读取。所以,这几项都需要用实体Bean来实现。

购物篮和购物篮条目只在顾客购物的过程中起作用,所以不是永久性的,而且每一个购物篮都对应于一个特定的顾客,对应于若干条特定的购物车条目,因此购物篮和购物篮条目用状态会话Bean来充当最合适不过。
估价器的作用是计算出购物篮和订单的价格,它并没有和特定的顾客绑定,可以作用于任意的购物篮,而且也不是永久对象,因此估价器可以用一个无状态会话Bean来充当。

订单处理器是一个特殊的对象,它通过顾客所要求的不同的付款方式产生不同的订单,也就是说,它是由不同的付款方式来驱动的。所以在这里用消息驱动Bean是最恰当的。

通过上面的分析,我们清楚的了解到不同类型的EJB在实际应用中如何发挥自己的作用。

Tags in this post...

面试题 相关文章推荐
PHP经典面试题
Sep 03 面试题
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
Feb 08 面试题
金智子午JAVA面试题
Sep 04 面试题
2019年Java面试必问之经典试题
Sep 12 面试题
介绍一下代理模式(Proxy)
Oct 17 面试题
Can a struct inherit from another struct? (结构体能继承结构体吗)
Sep 25 面试题
什么是makefile? 如何编写makefile?
Aug 08 面试题
当x.equals(y)等于true时,x.hashCode()与y.hashCode()可以不相等,这句话对不对
May 02 面试题
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
Oct 30 面试题
Java基础面试题
Nov 02 面试题
Servlet如何得到客户端机器的信息
Oct 17 面试题
介绍一下JNDI的基本概念
Jul 26 #面试题
什么是组件架构
May 15 #面试题
EJB与JAVA BEAN的区别
Aug 29 #面试题
什么是JNDI的上下文?如何初始化JNDI上下文
Mar 10 #面试题
为什么要用EJB
Apr 17 #面试题
EJB的角色和三个对象
Dec 31 #面试题
什么是会话Bean
May 14 #面试题
You might like
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
PHP 中的类
2006/10/09 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
Laravel 连接(Join)示例
2019/10/16 PHP
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
node.js超时timeout详解
2014/11/26 Javascript
JQuery创建DOM节点的方法
2015/06/11 Javascript
Ajax中解析Json的两种方法对比分析
2015/06/25 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
详解Webpack实战之构建 Electron 应用
2017/12/25 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
[01:54]TI4西雅图DOTA2选手欢迎晚宴 现场报道
2014/07/08 DOTA
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
python抽取指定url页面的title方法
2018/05/11 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
2019/02/22 Python
Python OS模块实例详解
2019/04/15 Python
倩碧英国官网:Clinique英国
2018/08/10 全球购物
大学生自我鉴定范文
2013/12/28 职场文书
如何写好优秀的创业计划书
2014/01/30 职场文书
烹饪自我鉴定
2014/03/01 职场文书
师德师风学习材料
2014/12/19 职场文书
自我检讨书范文
2015/01/28 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python