SessionBean中有状态Bean与无状态Bean区别
有状态会话Bean(SLSB)和无状态会话Bean(SFSB)的区别
1 无状态 (Stateless)
在不同方法调用间不保留任何状态 。
事务处理必须在一个方法中结束 。
通常资源占用较少;可以被共享(因为它是无状态的) 。
无状态Bean不会"专门"保存客户端的状态----(需要强调“专门”是因为无状态会话Bean也会有成员变量,有成员变量就可以保存状态,但它不会专门为特定的客户端保存状态。)。
----你对ENTITY BEAN的数据操作不会被容器维护,当其他的用户要用ENTITY BEAN时,里面的数据不
会被钝化到服务器的磁盘上。也就是被保存起来。
2 有状态 (Stateful)
可以在不同的方法调用间保持针对各个客户端的状态 。
与客户端的联系必需被维持;通常开销较大 。
有状态会话Bean会保存客户端的状态 。
--你对ENTITY BEAN的数据操作会被容器维护起来,当其他的用户要用你正在使用的ENTITY BEAN时,里面的数据会被钝化到服务器的磁盘上,例如网上的购物车。
区别的根本原因这与无状态会话Bean和有状态会话Bean的运行原理是相关的。对于有状态会话Bean来说,只要有客户端发送对有状态会话Bean的访问,服务器都会创建一个会话Bean实例与该客户端对应,这样这个实例与这个客户端就是一一对应的。如果客户端在Bean实例中保存了信息,之后还可以使用。对 于无状态会话Bean来说,服务器端会维持一个实例池,创建好若干个实例对象供客户端调用。当从客户端发送创建会话Bean的请求时,并不一定会真的创建 EJB,多数情况下是从实例池中得到一个实例,用完之后重新放回实例池。如果下次再访问,再从实例池中取出一个实例使用,并不一定是上次的实例。即使两次 访问使用的是同一个实例,在两次访问之间也有可能有其他的客户端访问了该实例。所以,并不能保证在多次访问之间的信息会被保存。所以,无状态会话Bean 不会专门保存客户端的信息。
各自的优缺点因 为有状态会话Bean需要保存特定客户端的信息,一个客户端对应一个实例,既是在当时客户端有连接没有访问的情况下,也要为这个客户端保留这个实例。这样 随着客户端数量的增加,服务器端需要创建的实例的数量也在增加,增加到一次程度对服务器的性能就会有一定的影响。为了不对服务器的性能产生影响,通常服务 器会进行一些优化。当客户端的数量超过某个值之后,就不创建新的实例。虽然不创建新的实例,还是需要对用户响应,这时候就采用共享实例的方式。会查看哪个 实例虽然处于连接状态,但是没有访问,然后把这个实例的状态保存起来,使用这个实例为新的请求服务,对于原来的客户端来说,称为挂起。如果原来的客户端又 发送请求了,会重新查找一个空闲的实例并且把已经保存好的状态恢复回来,这个过程称为激活。所以在有状态会话Bean的访问过程,经常会发生查找实例,激 活挂起等操作,所以效率比较低。而发送对无状态会话Bean的请求的时候,可以随便取一个空闲的实例为客户端服务,所以效率比较高。有状态会话Bean的好处是,可以保存客户端的状态,所以客户端在后续访问的时候就可以少传递一些参数。而状态会话Bean需要传递方法执行过程中需要的所有参数。
如何选择
根据上面分析的有状态会话Bean和无状态会话Bean的优缺点。如果要频繁的访问,并且多次访问之间会共享一些信息,这时候应该使用有状态会话Bean。对于不经常使用的功能,可以使用无状态会话Bean。无状态会话Bean的使用要比有状态会话Bean的使用多。
分享到:
相关推荐
理解并熟练运用有状态和无状态SessionBean是Java EE开发中的重要技能。通过研究和实践这些示例,你可以更深入地了解这两种Bean在实际项目中的应用,以及它们在处理不同业务需求时的优势和限制。同时,Swing程序和...
在EJB3.0中,无状态SessionBean是常用的一种组件类型,适用于处理短暂的、无持久性状态的业务逻辑。 1. **无状态SessionBean介绍** 无状态SessionBean代表了一个不保存客户端特定信息的业务逻辑组件。每次客户端...
SessionBean分为无状态(Stateless)和有状态(Stateful)两种类型。 - **无状态SessionBean**:不保留任何客户端会话信息,每次调用都视为独立操作,适合处理不依赖于上下文的简单请求。 - **有状态SessionBean**...
不同于Stateful Session Bean(保持状态的会话bean),每个客户端请求都会创建一个新的bean实例,并保存其状态,Stateless Session Bean(无状态会话bean)不存储任何客户端特定的信息。这意味着无状态会话bean对于...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除……
基于java的开发源码-EJB中有、无状态SessionBean的两个例子.zip 基于java的开发源码-EJB中有、无状态SessionBean的两个例子.zip 基于java的开发源码-EJB中有、无状态SessionBean的两个例子.zip 基于java的开发源码-...
2. **Stateless Session Bean**:无状态会话Bean不维护与客户端会话的任何持久状态。它们适用于执行无关联的独立操作,例如计算或数据验证。 Session Bean可以有接口(Remote或Local),客户端通过调用这些接口的...
实现有状态Session Bean的步骤与无状态类似,但需要使用`@Stateful`注解,并且生命周期管理更为复杂: 1. 定义接口:创建业务方法接口。 2. 实现接口:创建实现接口的EJB类,使用`@Stateful`注解。 3. 存储和管理...
Session Bean主要有两种类型:Stateful Session Beans(有状态会话Bean)和Stateless Session Beans(无状态会话Bean)。Stateless Session Beans在处理客户端请求时不会维护任何特定客户端的状态,每个请求都被视为...
有状态会话Bean与无状态Bean的主要区别在于它们能保留客户端会话状态。当客户端首次与有状态Bean交互时,服务器会为该客户端创建一个专用实例。这个实例会记住客户端的所有交互信息,直到客户端结束会话或Bean被...
Session Bean是一种无状态或有状态的Java对象,它们代表了客户端与服务器之间的会话。无状态Session Bean不保留任何关于客户端的信息,而有状态Session Bean可以存储客户端特定的信息,以提供个性化的服务。 **3. ...
在Java EE架构中,SessionBean通常作为无状态或有状态会话bean,以处理多个客户端请求。无状态SessionBean对每个请求都创建一个新的bean实例,不保留任何特定客户端的信息;而有状态SessionBean则可以保存客户端的...
本教程将深入探讨有状态和无状态Session Bean的区别和使用场景,通过具体的例子来加深理解。 首先,让我们定义这两个概念: 1. **有状态Session Bean (Stateful Session Bean)**:这种类型的Session Bean可以维护...
Java SessionBean状态判断的例子,代码包中的两个实例,分别对无状态SessionBean和有状态SessionBean进行了演示,请注意,Home对象是EJB对象的制作生成库,该方法生成EJB对象,value参数用于计数器的初始化,在无状态...
本压缩包提供了有状态和无状态两种Session Bean的示例代码,帮助开发者理解和掌握这两种类型的区别和应用场景。 1. **EJB Session Bean概述** Session Bean是EJB中的服务组件,它们代表客户端的会话。根据会话的...
与Stateful Session Bean(有状态会话Bean)不同,它维护了客户端会话状态,而Stateless Session Bean(无状态会话Bean)则不保留任何客户端状态,每次调用都独立于其他调用。Session Bean主要用于表示业务逻辑,...
本压缩包提供了两个关于Java EJB中状态ful(有状态)和stateless(无状态)SessionBean的实例,帮助开发者深入理解这两种类型的Bean。 一、有状态SessionBean(Stateful Session Bean) 有状态SessionBean(SFSB,...
有状态会话Bean(Stateful Session Bean,SFSB)与无状态会话Bean(Stateless Session Bean, SLSB)的主要区别在于它们如何维护与客户端之间的交互状态。SLSB不存储任何关于客户端的信息,每次方法调用都是独立的,...