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

面试题 相关文章推荐
你所知道的集合类都有哪些?主要方法?
Dec 31 面试题
联强国际笔试题面试题
Jul 10 面试题
2019年Java面试必问之经典试题
Sep 12 面试题
Java工程师面试集锦之Spring框架
Jun 16 面试题
杭州SQL浙江浙大网新恩普软件有限公司
Jul 27 面试题
如何在发生故障的节点上重新安装 SQL Server
Mar 14 面试题
西安众合通用.net笔试题
Mar 18 面试题
商得四方公司面试题(gid+)
Apr 30 面试题
请解释流与文件有什么不同
Jul 29 面试题
如何利用cmp命令比较文件
Sep 23 面试题
Prototype如何实现页面局部定时刷新
Aug 06 面试题
Java面试题冲刺第十七天--基础篇3
Aug 07 面试题
介绍一下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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
提升PHP执行速度全攻略(上)
2006/10/09 PHP
php不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
PHP判断上传文件类型的解决办法
2015/10/20 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
php支付宝APP支付功能
2020/07/29 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
jquery radio 操作代码
2011/03/16 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
原生js实现轮播图特效
2020/05/04 Javascript
使用python绘制人人网好友关系图示例
2014/04/01 Python
详解K-means算法在Python中的实现
2017/12/05 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
Ubuntu中配置TensorFlow使用环境的方法
2020/04/21 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
python+django+selenium搭建简易自动化测试
2020/08/19 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
家居饰品店创业计划书
2014/01/31 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
2014年法制宣传日活动方案
2014/11/02 职场文书
写给老师的感谢信
2015/01/20 职场文书
感谢信模板大全
2015/01/23 职场文书
幼儿园教师求职信
2015/03/20 职场文书
python基础学习之生成器与文件系统知识总结
2021/05/25 Python