EJB组件介绍
会话Bean代表的是调用它的客户程序所完成的工作,会话Bean是商务过程的对象。它们执行商务逻辑、
商务规则、算法和工作流程。例如:一个会话Bean可以完成价格估计、订单输入、视频压缩、银行之间
的转帐、股票交易、数据库操作、复杂计算等。它们是包含有商务逻辑过程的可重用的组件。
session bean------->特点
相对生命较短(一般与客户同步)
在EJB服务器崩溃时被删除
不表示数据库中的数据,但可以访问数据
作为一个客户的代表执行功能
可以加入事务
客户端会话时间的长短决定着一个会话Bean使用的长短,EJB容器在客户端中止连接时清除会话Bean。
一般来说,当应用服务器崩溃时或是机器崩溃时,会话Bean的生命周期也就会结束,它们是存活在
内存中的对象,随着周围环境的改变或”生“,或“死”。实体Bean是持久性对象,与数据库保持同步
会话bean可以对数据库进行操作,但本身不是持久性对象。
所有的Enterprise Bean与客户端都保持着某种程度的对话关系。所谓的对话,指的是客户端和Bean
之间的相互作用,它有很多客户端和bean之间的方法调用组成。一次对话跨越客户端的商务处理过程
如配置帧中继交换机,通过因特网购物,输入新用户的信息等。有两种会话Bean子类型:对话型会话
Bean与非对话型会话Bean。每一种都用于对不同类型的会话建模。
何时使用会话bean?
使用会话bean 对针对于某一客户的处理或控制对象建模,对工作流、任务和管理活动等建模(如订
房、购物车等)协调多个实体bean,控制实体bean之间的交互,将业务应用逻辑从客户端转移到服
务器端.会话bean代表为一个用户而执行的操作,它们代表包括任何工作流逻辑的用户会话。
一些商务过程本身就是一个包含很多请求而且持续很久的对话。例如在一个电子商务型web商店中,当
一个用户在电子商务Web网站上购物时,用户可以向购物车内添加物品。用户每添加一个物品,就执行
一次请求。这样的商务过程决定了组件必须跟踪每一次请求时的用户状态(如购物车状态).
stateful session bean**********
状态会话Bean是为服务于商务过程而设计的Bean,这些商务过程往往要跨越很多方法请求和事务处理
为了能实现这个目标,状态会话Bean保留每个客户的状态。如果一个状态会话Bean的状态在方法调用
期间改变,那么在接下来的调用过程中,与Bean对应的客户状态也随之改变。
**************************************************************************
无状态(Stateless)bean
表达一个无状态的服务(如列表,mail)
不存储用户相关信息,进行对请求的响应
暂态的
可用来构造响应频繁而简单的访问的bean池
***************************************************************************
stateless session bean无状态会话bean
无状态会话Bean只能保留单一对话内容,它们没有状态是因为他们不与客户端程序进行多方法对话。
在每一个方法调用完成之后,容器可能会选择销毁这个无状态会话Bean,或者重新生成一个,这样就
清除了所有与过去的调用相关的信息。当然,容器也可能选择保存实例,这样所有想使用这个会话
Bean的客户端程序都可以重用它。如果一个Bean的一次对话只持续单一的方法调用,该Bean就叫做
无状态会话Bean。无状态会话bean实际上意味着没有会话状态。无状态会话bean可以保持不与任何特
定客户相关的状态。
*******************************************************************************
维护客户状态
///
实体Bean
对业务概念的反映,也称为领域类(domain class)
在持久存储中业务实体的对象视图
提供访问和操作数据的对象封装
支持多用户共享的数据
可以从数据库中存储的属性重新实例化
EJB 服务器崩溃后仍可重构
与数据库中的数据有一样长的生命
(Entity Bean代表的是后端数据库中某一个数据表(Table)或是View的数据)
Bean-Managed Persistence(自管理的持久性)----->BMP
优点:
开发者有完全的控制
无需复杂的提供商支持
缺点:
编码复杂
在改变时需要重新编码和部署
影响可移植性
Container-Managed Persistence(容器管理的持久性)------->CMP
优点:
提供商解决,可能会有更好的缓冲和性能
在部署描述符中进行改变即可
可移植性好
缺点:
对容器提供商的工具依赖性强
可能不易反映复杂的数据关系
会话bean和实体bean对比
会话bean 实体bean
表示一个业务过程 表示业务数据
每一客户一个实例(购物车,不能往别人的cart放东西) 在多个客户间共享实例
Short-lived:与客户生命同步 Long-lived:与数据库中数据同步
暂态的 (会话bean实例一般不与其它客户端共享,cart) 持久的
服务器崩溃后丢失 服务器崩溃后可重构
可以是事务性的 总是事务性的
Session EJB(会话EJB)是短暂存在的对象,它同样运行在服务器端,并执行一些应用逻辑处理。它的
实例对象由客户端应用程序建立并仅能够被该应用程序所使用,其保存的数据需要开发者编写程序来管
理。session bean主要用来完成数据库访问或是数据计算等工作。entity bean主要用来提供数据
持久化。(O/R映射,hibernate。)
Entity EJB(实体EJB)是持久运行的EJB,对象由某个客户端应用程序创建但是可以被其他对象或者
其他的应用程序调用与Session EJB 不同Entity EJB 必须在建立时制定一个唯一的标识并提供相
应的机制允许客户应用程序根据Entity EJB 标识来定位Entity EJB 的实例对象多个用户可以并发
访问Entity EJB 事务之间的协调工作由EJB Container或者EJB 类自身来完成。应当注意Session
EJB 只能够被创建它的应用程序所调用所以不存在事务协调的问题Entity EJB 支持事务处理当系
统停机时也可以恢复停机以前的状态包括EJB 对象所数据在内。
实体EJB的角色:
实体EJB 用来代表底层的对象,最常见的是用实体EJB代表关系型数据库中的数据。一个简单的实体
EJB可以定义成代表数据库表的一个记录,也就是每一个实例代表一个特殊的记录。更复杂的实体EJB
可以代表数据库表之间的关联视图,在实体EJB 中还可以考虑包含厂商的增强功能,如对象-关系映
射的集成。通常用实体类代表一个数据库表比代表多个相关联的表更简单且更有效,反过来可以轻易
地向实体类的定义中增加关联,这样可以最大地复用cache并减小旧数据的表现。
实体EJB 和会话EJB 的比较:
看起来会话EJB 好象没什么用处,尤其对于数据驱动的应用程序,当然事实并不是这样。因为实体
EJB 譬如说代表底层数据库的一行纪录,则实体EJB 实例和数据库记录间就是一对一的关系,因为多
个客户端程序必须访问底层记录,这意味着不同于会话EJB,客户端程序必须共享实体EJB(事实上这
个功能也可以使用会话EJB来完成。不过效率不高,消耗系统资源过多,有多少个客户端程序在运行,
就需要多少个会话EJB 在服务端运行,而使用实体EJB 就好多了,只需要一个实体EJB 在运行即可)
因为实体EJB是共享的,所以实体EJB不允许保存每个客户端的信息,会话EJB允许保存客户端的状态
信息,客户端应用程序和会话EJB 实例间是一对一的。实体EJB允许保存记录的信息。实体EJB的实
例和记录间是一对一的,一个理想的情况是客户端通过会话EJB 连接服务器,然后会话EJB通过实体
EJB访问数据库,这使得既可以保存客户端的信息又可以保存数据库记录的信息,没有会话EJB应用
程序开发者客户端,开发者就必须理解EJB 类的事务要求并使用客户端的事务划分来提供事务控制
EJB的主要好处就是应用开发者不需知道EJB类的事务需求,一个会话EJB可以代表一个商业操作进行
事务控制不需要在客户端程序中进行事务划分。创建一个实体EJB 意味着一个记录被插进数据库中。
实体bean完全有别于会话bean。会话bean模仿一个过程或工作流(用户启动的操作,当用户离开时
它就消失)。另一方面,实体Bean包含核心商务数据,例如,产品信息,银行帐户,订单、引导客
户追踪信息、客户信息等等。一个实体bean不执行复杂的任务或工作流逻辑,例如给一个客户记帐。
更恰当的讲,一个实体bean本身就是客户。实体bean代表持久状态的对象(当用户离开时它不会消失)
会话Bean代表的是调用它的客户程序所完成的工作,会话Bean是商务过程的对象。它们执行商务逻辑、
商务规则、算法和工作流程。例如:一个会话Bean可以完成价格估计、订单输入、视频压缩、银行之间
的转帐、股票交易、数据库操作、复杂计算等。它们是包含有商务逻辑过程的可重用的组件。
session bean------->特点
相对生命较短(一般与客户同步)
在EJB服务器崩溃时被删除
不表示数据库中的数据,但可以访问数据
作为一个客户的代表执行功能
可以加入事务
客户端会话时间的长短决定着一个会话Bean使用的长短,EJB容器在客户端中止连接时清除会话Bean。
一般来说,当应用服务器崩溃时或是机器崩溃时,会话Bean的生命周期也就会结束,它们是存活在
内存中的对象,随着周围环境的改变或”生“,或“死”。实体Bean是持久性对象,与数据库保持同步
会话bean可以对数据库进行操作,但本身不是持久性对象。
所有的Enterprise Bean与客户端都保持着某种程度的对话关系。所谓的对话,指的是客户端和Bean
之间的相互作用,它有很多客户端和bean之间的方法调用组成。一次对话跨越客户端的商务处理过程
如配置帧中继交换机,通过因特网购物,输入新用户的信息等。有两种会话Bean子类型:对话型会话
Bean与非对话型会话Bean。每一种都用于对不同类型的会话建模。
何时使用会话bean?
使用会话bean 对针对于某一客户的处理或控制对象建模,对工作流、任务和管理活动等建模(如订
房、购物车等)协调多个实体bean,控制实体bean之间的交互,将业务应用逻辑从客户端转移到服
务器端.会话bean代表为一个用户而执行的操作,它们代表包括任何工作流逻辑的用户会话。
一些商务过程本身就是一个包含很多请求而且持续很久的对话。例如在一个电子商务型web商店中,当
一个用户在电子商务Web网站上购物时,用户可以向购物车内添加物品。用户每添加一个物品,就执行
一次请求。这样的商务过程决定了组件必须跟踪每一次请求时的用户状态(如购物车状态).
stateful session bean**********
状态会话Bean是为服务于商务过程而设计的Bean,这些商务过程往往要跨越很多方法请求和事务处理
为了能实现这个目标,状态会话Bean保留每个客户的状态。如果一个状态会话Bean的状态在方法调用
期间改变,那么在接下来的调用过程中,与Bean对应的客户状态也随之改变。
**************************************************************************
无状态(Stateless)bean
表达一个无状态的服务(如列表,mail)
不存储用户相关信息,进行对请求的响应
暂态的
可用来构造响应频繁而简单的访问的bean池
***************************************************************************
stateless session bean无状态会话bean
无状态会话Bean只能保留单一对话内容,它们没有状态是因为他们不与客户端程序进行多方法对话。
在每一个方法调用完成之后,容器可能会选择销毁这个无状态会话Bean,或者重新生成一个,这样就
清除了所有与过去的调用相关的信息。当然,容器也可能选择保存实例,这样所有想使用这个会话
Bean的客户端程序都可以重用它。如果一个Bean的一次对话只持续单一的方法调用,该Bean就叫做
无状态会话Bean。无状态会话bean实际上意味着没有会话状态。无状态会话bean可以保持不与任何特
定客户相关的状态。
*******************************************************************************
维护客户状态
///
实体Bean
对业务概念的反映,也称为领域类(domain class)
在持久存储中业务实体的对象视图
提供访问和操作数据的对象封装
支持多用户共享的数据
可以从数据库中存储的属性重新实例化
EJB 服务器崩溃后仍可重构
与数据库中的数据有一样长的生命
(Entity Bean代表的是后端数据库中某一个数据表(Table)或是View的数据)
Bean-Managed Persistence(自管理的持久性)----->BMP
优点:
开发者有完全的控制
无需复杂的提供商支持
缺点:
编码复杂
在改变时需要重新编码和部署
影响可移植性
Container-Managed Persistence(容器管理的持久性)------->CMP
优点:
提供商解决,可能会有更好的缓冲和性能
在部署描述符中进行改变即可
可移植性好
缺点:
对容器提供商的工具依赖性强
可能不易反映复杂的数据关系
会话bean和实体bean对比
会话bean 实体bean
表示一个业务过程 表示业务数据
每一客户一个实例(购物车,不能往别人的cart放东西) 在多个客户间共享实例
Short-lived:与客户生命同步 Long-lived:与数据库中数据同步
暂态的 (会话bean实例一般不与其它客户端共享,cart) 持久的
服务器崩溃后丢失 服务器崩溃后可重构
可以是事务性的 总是事务性的
Session EJB(会话EJB)是短暂存在的对象,它同样运行在服务器端,并执行一些应用逻辑处理。它的
实例对象由客户端应用程序建立并仅能够被该应用程序所使用,其保存的数据需要开发者编写程序来管
理。session bean主要用来完成数据库访问或是数据计算等工作。entity bean主要用来提供数据
持久化。(O/R映射,hibernate。)
Entity EJB(实体EJB)是持久运行的EJB,对象由某个客户端应用程序创建但是可以被其他对象或者
其他的应用程序调用与Session EJB 不同Entity EJB 必须在建立时制定一个唯一的标识并提供相
应的机制允许客户应用程序根据Entity EJB 标识来定位Entity EJB 的实例对象多个用户可以并发
访问Entity EJB 事务之间的协调工作由EJB Container或者EJB 类自身来完成。应当注意Session
EJB 只能够被创建它的应用程序所调用所以不存在事务协调的问题Entity EJB 支持事务处理当系
统停机时也可以恢复停机以前的状态包括EJB 对象所数据在内。
实体EJB的角色:
实体EJB 用来代表底层的对象,最常见的是用实体EJB代表关系型数据库中的数据。一个简单的实体
EJB可以定义成代表数据库表的一个记录,也就是每一个实例代表一个特殊的记录。更复杂的实体EJB
可以代表数据库表之间的关联视图,在实体EJB 中还可以考虑包含厂商的增强功能,如对象-关系映
射的集成。通常用实体类代表一个数据库表比代表多个相关联的表更简单且更有效,反过来可以轻易
地向实体类的定义中增加关联,这样可以最大地复用cache并减小旧数据的表现。
实体EJB 和会话EJB 的比较:
看起来会话EJB 好象没什么用处,尤其对于数据驱动的应用程序,当然事实并不是这样。因为实体
EJB 譬如说代表底层数据库的一行纪录,则实体EJB 实例和数据库记录间就是一对一的关系,因为多
个客户端程序必须访问底层记录,这意味着不同于会话EJB,客户端程序必须共享实体EJB(事实上这
个功能也可以使用会话EJB来完成。不过效率不高,消耗系统资源过多,有多少个客户端程序在运行,
就需要多少个会话EJB 在服务端运行,而使用实体EJB 就好多了,只需要一个实体EJB 在运行即可)
因为实体EJB是共享的,所以实体EJB不允许保存每个客户端的信息,会话EJB允许保存客户端的状态
信息,客户端应用程序和会话EJB 实例间是一对一的。实体EJB允许保存记录的信息。实体EJB的实
例和记录间是一对一的,一个理想的情况是客户端通过会话EJB 连接服务器,然后会话EJB通过实体
EJB访问数据库,这使得既可以保存客户端的信息又可以保存数据库记录的信息,没有会话EJB应用
程序开发者客户端,开发者就必须理解EJB 类的事务要求并使用客户端的事务划分来提供事务控制
EJB的主要好处就是应用开发者不需知道EJB类的事务需求,一个会话EJB可以代表一个商业操作进行
事务控制不需要在客户端程序中进行事务划分。创建一个实体EJB 意味着一个记录被插进数据库中。
实体bean完全有别于会话bean。会话bean模仿一个过程或工作流(用户启动的操作,当用户离开时
它就消失)。另一方面,实体Bean包含核心商务数据,例如,产品信息,银行帐户,订单、引导客
户追踪信息、客户信息等等。一个实体bean不执行复杂的任务或工作流逻辑,例如给一个客户记帐。
更恰当的讲,一个实体bean本身就是客户。实体bean代表持久状态的对象(当用户离开时它不会消失)