EJB《什么是会话bean》

来源:互联网 发布:zblog php自适应模板 编辑:程序博客网 时间:2024/05/18 16:14

一个会话bean压缩了能够被本地,远程,webservice客户端程式调用的业务逻辑。客户端调用会话bean的方法来使用部署在服务端的应用程序。会话bean为客户端工作,并且通过执行服务端内的业务方法把客户端与复杂的业务逻辑分离。

 

一个会话bean是非持久化的(换句话说就是数据不保存在数据库中)

 

【1】会话bean的类型


会话bean包括三种类型:有状态,无状态,单例。

 

【1.1】有状态会话bean

一个对象的状态由实例变量的值组成。在一个有状态的会话bean中,实例变量代表着一个唯一的客户端/bean会话的状态。因为在客户端和会话bean交互过程中,这种状态经常被称之为会话状态

 

正如其名,一个会话bean就好比一个交互的会话。一个会话bean是不共享的;它只能有一个客户端,同样的,这个交互的会话只能有一个用户。当客户端执行结束时,它的会话bean也开始结束并且不再与客户端连接。

 

状态在客户端/bean会话期间被保存。如果客户端移除bean,这个会话结束并且其状态消失。这种状态的瞬变特性不是一个问题,因为会话在客户端和bean结束期间,没有必要保存状态。

 

【1.2】无状态会话bean

无状态的会话bean不维护客户端的会话状态。当客户端调用无状态会话bean的方法时,bean的实例变量可能包含特定客户端调用期间的状态。当方法结束时,特定客户端的状态也将消失。然而,客户端可能改变无状态会话bean池中实例变量的状态,并且这种状态延迟到下一次无状态会话bean的调用过程中。除了方法调用期间,所有的无状态会话bean的实例都是等价的,它们可以被EJB容器分配一个实例到任何客户端。换句话说,无状态会话bean的状态应该适用于所有客户端。

 

因为它们可以支持多客户端,无状态会话bean可以提供更好的可扩展性给大数量级客户端的应用程序使用。典型的,在同样数量的客户端情况下,应用程序需要的无状态会话bean比有状态会话bean要少得多。

 

无状态会话bean能够实现一个web service,但是有状态会话bean不行。

 

【1.3】单例会话bean

单例会话bean在一个应用程序中只实例化一次并且存在于整个应用程序生命周期中。单例会话bean是基于以下两种环境来设计的,一个单一的企业bean实例是共享的和多客户端并发访问。

 

单例会话bean提供和无状态会话bean相似的功能,但是不同的是,一个应用程序中只有一个单例会话bean实例,相反的无状态会话bean有一池实例,这一池实例中任意一个都可以响应客户端的请求。和无状态会话bean相似的是,单例会话bean也可以实现未必 service端点。

 

单例会话bean维护客户端调用期间的状态,但是不需要在服务器崩溃或者关闭时维护状态。

 

应用程序启动时单例就应该被实例化,在这种情况下应用程序可能会使用单例会话bean,单例会话bean为应用程序执行初始化任务。同样的,党应用程序关闭时单例也可以执行清除任务,因为单例将存在于整个应用程序的生命周期中。

 

【2】什么时候使用会话bean


如果下列任一条件成立,有状态会话bean都适用

、bean的状态表示bean与一个特定客户端之间的交互过程

、在客户端调用方法期间bean需要持有信息

、bean传递于客户端和其他呈现简单的view给客户端的应用组件之间

、bean在幕后管理一些企业bean的工作流

 

为了改善性能,在程序有如下特性时你可以选择无状态会话bean

 、对于一个特定的客户端,bean的状态没有数据

 、在单个方法调用过程中,bean为所有客户端执行了一个寻常的任务。举个例子,你可以用无状态会话bean来发送邮件来确认一个在线订单

 、 bean实现了一个webservice

 

单例会话bean适用于以下几个场景

、状态需要在整个应用程序中共享

、 单个企业bean需要被多线程并发访问

、 在应用程序启动或结束时需要企业bean执行任务

、 bean实现了一个webservice


原文:http://docs.oracle.com/javaee/6/tutorial/doc/gipjg.html


1 0