介绍一下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...

面试题 相关文章推荐
什么是接口(Interface)?
Feb 01 面试题
数据库连接池的工作原理
Sep 26 面试题
面向对象编程的优势是什么
Dec 17 面试题
C/C++程序员常见面试题二
Nov 19 面试题
某IT外企面试题-二分法求方程!看看大家的C++功底
Jul 04 面试题
C++的几个面试题附答案
Aug 03 面试题
如何在存储过程中使用Loop
Jan 05 面试题
最新远光软件笔试题面试题内容
Nov 08 面试题
如何从一个文件档案的尾端新增记录
Dec 02 面试题
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Jan 27 面试题
Java中的类包括什么内容?设计时要注意哪些方面
May 23 面试题
shell程序如何生命变量?shell变量是弱变量吗?
Nov 10 面试题
介绍一下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
PHP教程 变量定义
2009/10/23 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
jQuery 常见学习网站与参考书
2009/11/09 Javascript
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
js 获取、清空input type="file"的值示例代码
2014/02/19 Javascript
JS实现搜索框文字可删除功能
2016/12/28 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
解析vue data不可以使用箭头函数问题
2018/07/03 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
vue进入页面时滚动条始终在底部代码实例
2019/03/26 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
python3编码问题汇总
2016/09/06 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
Python OpenCV实现视频分帧
2019/06/01 Python
python安装requests库的实例代码
2019/06/25 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
python实现录制全屏和选择区域录屏功能
2021/02/05 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
什么是servlet
2012/05/08 面试题
机修工岗位职责
2013/11/24 职场文书
村委会主任先进事迹
2014/01/15 职场文书
学生会个人自荐书范文
2014/02/12 职场文书
信息与计算科学专业推荐信
2014/02/23 职场文书
商务日语专业自荐信
2014/04/17 职场文书
《美丽的丹顶鹤》教学反思
2014/04/22 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
2015年复活节活动总结
2015/02/27 职场文书
《卖火柴的小女孩》教学反思
2016/02/19 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
redis内存空间效率问题的深入探究
2021/05/17 Redis
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL