Bean的分类

来源:互联网 发布:淘宝热卖产品有哪些 编辑:程序博客网 时间:2024/05/16 12:05
4. 1.6 Enterprise Bean分类
EJB依照特性的不同,区分为三种,表4-1列出了三种不同类型的企业Bean.
        表4-1企业Bean的分类
        企业Bean            类型作用
        会话Bean            完成客户端请求的动作
        实体Bean            描述持久存储的商业实体对象
        消息驱动Bean    作为JMS(Java Message Service Java消息服务)
API的监听者异步处理监听到的消息
下面分别介绍每种EJB的情况:
4. 2会话Bean
4. 2. 1什么是会话Bean
会话Bean(会话Bean):根据EJB规范,一个会话Bean是:
.代表单个客户端来执行
.可以参与到事务处理中
.不直接代表共享于数据库中的数据,但它能访问和更新这些数据
.相对而言是短暂存在的
当EJB容器失效后就不存在-一客户端需要重新建立一个信新的会话对象来
继续运算
会话Bean可被视为客户端程序在服务器上的部分逻辑延伸,每会话Bean对
象对应于特定的客户端,不能在多个客户端间共享.换句话说,会话Bean用于表
示运行于服务器端的部分业务过程,作为客户端的代理,管理业务过程或任务,
如客户对账户的借贷操作,汇率的计算,等等这些涉及逻辑,算法和工作流的种
种任务.这些过程都是特定的客户行为,EJB根据这些过程在运行时创建过程实例,
执行计算或者清除实例.
4. 2. 2会话Bean的分类
根据状态管理模式的不同会话Bean可以分为两类:有状态(stateful)会话
Bean和无状态(stateless)会话Bean.
1)有状态会话Bean
一个对象的状态由它的成员变量(数据成员)的状态决定.有状态会话Bean
的成员变量描述一个唯一的客户端一会话Bean的关联状态.因为客户端要与对应
的会话Bea.进行对话,所以这种状态通常被叫做会话状态.当一个客户端与某一
个有状态的会话EJB开启一个会话时,这个EJB为客户端维护了一个会话状态.
这暗示着客户端向此EJB发出不同调用请求之间保证EJB的成员变量值不会丢失.
会话状态在整个会话期间被保留.如果客户端运行结束或者删除对应的会话
Bean,这个会话就结束同时状态被清除.这种状态的短暂性并不是问题,相反,
如果客户端和会话Bean的对话结束就不必要在保留会话的状态了.一旦客户端结
束与有状态的会话EJB的交互后,EJB容器会自动销毁它.于是整个会话结束,并
且此有状态的会话EJB所保存的状态数据会全部丢失.
2)无状态会话Bean
无状态会话Bean并不为客户端保留会话状态.在客户端调用无状态会话Bean
的方法时,对应会话Bean的数据成员会描述这个调用状态,但只在该方法调用期
间保持这个状态.当方法调用结束,状态就被清除.除了在方法调用期间,所有
同一个无状态会话Bean实例是等价的,可以被容器分配给任一客户端.
因为无状态会话Bean可以同时支持多个客户端,所以能更好的支持应用程序
的可数的大量客户端.很明显,对支持相同数量的客户端的应用程序,需要的无
状态会话Bean会比有状态会话Bean要少.
有时,EJB容器会在没有请求的时候把有状态会话Bean保存在内存(二级存
储器Second Storage)中.不管什么时候,没有请求时无状态会话Bean都不会被
保存中.所以,无状态会话Bean会比有状态会话Bean有更高的性能.
4. 2. 3会话日an的生命周期
1)有状态会话Bean的生存周期如下图所示:
1.treate
2.setsessionContext
3.旬bC饱欲e
图4-2有状态会话Bean的生存周期
会话Bean的生存周期开始于客户端对create方法的调用.随后,EJB容器
调用组件类的setSessionContext方法和ejbCreate方法.现在,E丁B进入就绪状
态,可以进行业务方法的用.
对处于就绪状态的EJB,容器可以决定是否将其从内存中转移到二级存储器,
然后调用ejbPassivate方法,使EJB进入钝化状态.当客户端对处于钝化状态的
EJB调用业务方法时,容器激活EJB,将其转移到就绪状态,然后调用EJB的
ejbActivate方法.
当客户端调用remove方法,EJB容器调用EJB的ejbRemove方法,然后,EJB
完成其生存周期,可以对其进行垃圾回收.
客户端代码对有状态会话Bean生存周期的控制只能通过create和remove方
法.其他方法由EJB容器进行调用.
2)无状态会话Bean的生存周期
因无状态会话Bean不会进行被钝化操作,因此,其生存周期只有两个阶段,
不存在和就绪状态.
下图表示无状态会话Bean的生存周期:
l .create
2.se巧essionContext
3.ejbCreate
I .remove
2.ejbRemove
准备
图4-3无状态会话Bean的生存周期
4. 2. 4会话Bea.的使用场合
通常,在出现以下几种情况时需要用会话Bean:
1)在任何给定时间,只有一个客户端访问这个Bean的实例.
2) Bean的状态并不需要持久保存,只在一个时间段内保持.
在以下情况下,建议采用有状态会话Bean:
1) Bean需要描述一个于特定客户端的会话状态
2) Bean需要在客户端的多个方法调用之间保存调用信息
3) Bean作为应用程序的其他组件和客户端的中介者,呈现一个简单化的视图
给客户端
4)在调用接口里,Bean管理很多企业Bean的工作流.
在以下情况下,为了得到更高的性能应该选择无状态会话Bean:
1) Bean的状态不包含客户端相关的数据
2)在一个单一方法调用中,Bean己经可以为客户端完成所需要的工作.例如
你可以用无状态会话Bean发一封邮件确认网络订单.
3) Bean需要从数据库获取一些客户端经常访问的只读数据.例如可以用这样
的Bean来访问数据表中代表这个月已经卖出的产品的行.
4. 3实体Bean
4. 3. t什么是实体Bean
实体Bean(实体Bean):根据EJB规范,一个实体Bean是:
.提供在数据库中数据的对象视图
允许被多个用户共享存取访问
.可以是长期存在(只要它存在于数据库中)
.实体Bean,它的主键对象,以及它的远程引用将能跨EJB容器的宕机而
存在
实体Bean用于表示保存在持久数据存储机制中的实体,为这些实体提供面向
对象的视图,如关系型数据库中的业务实体数据,或传统业务系统中的业务实体
一个实体Bean描述一个持久存储备的商业对象.商业对象的例子如:消费者,订
单和产品等.在J2EE SDK中持久存储设备是一个关系型数据库.最典型的情况是
一个实体Bean又一个在地层数据库中有一个表相对应,而实体Bean的每一个实
例对应表中的一行数据.
实体Bean有一下特征:
1)实体Bean可以幸免于故障
2)实体Bean实例是一个对应到数据库中的视图
3)几个实体Bean实例可能代表同一底层数据
4)实体Bean实例可以被收集并再利用