什么时候用有状态session bean,什么时候用无状态session bean

原创 2001年12月14日 09:25:00

什么时候用有状态session bean,什么时候用无状态session bean

最近,有关于无状态的许多大惊小怪。无状态的缺陷常常被夸大,
它的优点也一样。许多无状态的支持者盲目的宣称无状态能带来
更大的伸缩性;而有状态的支持者争论说必须为了适应无状态
而重建整个系统。真实的情况是什么呢?

通过正确地设计,无状态有以下两个优点:
1.使用stateless bean,EJB容器能容易的pooling和重用bean,
允许少量的bean去服务很多客户端。用stateful bean去做同样
的事情时,bean的状态在方法调用之间必需要钝化和活化,可
能导致I/O瓶颈。所以无状态的一个实际的好处是使用很小的
开销来容易的pool和重用组件。

2.因为一个stateful session bean在内存中缓冲一个客户端
的对话,一个bean失败可能导致失去你的对话。这能导致严重
的反响,如果你不在写bean时考虑到这一点,或者你不使用一
个提供有状态恢复的EJB产品。在一个无状态模型里面,请求
能被透明的重路由到一个不同的组件,因为任何组件都能为
客户端的需要提供服务。

   最大的无状态的缺点是你需要在每个方法调用中把客户相关的
的数据推到stateless bean。大多数stateless session bean
将需要接收对一个客户端特定的一些信息,如对banking bean的
银行帐户号码。这些信息要每次一个客户端请求到达时被提供到
stateless bean,因为bean不能对一个特定的客户端保持状态。

  一种向bean提供客户相关的数据的方法是把数据作为参数传到
bean的方法中。这可能导致性能下降,然而,只是发生在传递的
数据量很大的情况下。这也阻塞了网络,降低了其他进程的带宽。

  另一种为stateless bean提供客户相关的数据的方法,为那个
bean为一个客户端持久性的存储数据。客户端不需要在一个方法
调用中传递所有的状态,而只简单的需要从持久化的storage得到
数据。这里的trade-off又是性能:存储对话持久化的能得到存储
I/O瓶颈,而不是网络I/O瓶颈。

  再一种超越无状态的限制的方法是使用JNDI去存储客户相关数据
到一个目录结构。客户端能够等一会传给bean一个在目录结构定位
数据的标识。这和存储数据到数据库很相似。比较大的区别是JNDI
实现能是一个in-memory实现(和共享属性管理器有相同作用,对
com+读者来说应该很熟悉)。如果数据存在内存中,没有数据库会
碰上。

  当从有状态和无状态之间选择,你应该问你自己商业进程展开
多调用,需要一个对话?如果是这样,有状态模型应该很合适因
为客户相关的对话能成为bean状态的一部分。相反,如果你的商业
进程变成一个方法调用,无状态能更适合你的需要。

  注意如果你要去使用状态,并且你要去建一个基于web的系统,
你可能可以用一个servlet的HttpSession对象去做到这一点,和
stateful session bean大致一样。该用stateful session bean
而不是HttpSession的情况如下:
1.你需要一个事务感知的有状态对象。你的session bean能用
SessionSynchronization来做到这一点。

2.你既有基于web的也有不基于web的客户端来存取你的EJB层,
而且都需要状态。

3.你在使用一个stateful session bean来暂时存储一个商业进程
的暂时状态,这发生在牵扯到多个bean的单个Http请求中。

  综上所述,大多数先进的deployment要有复杂而有趣的有状态的
和无状态的组合。使用对你的商业问题最合适的。一个例外是如果
有一个明显的瓶颈,如保持成兆的状态在内存中。而如果你在选择
有状态还是无状态,你会发现有状态可能不是你的首要问题:直到
你测试你的代码,你还在黑暗中乱开枪。如果有状态是你的瓶颈,
如果有必要,你可以重构你的代码。

有状态sessionbean 无状态sessionbean

有状态会话Bean(SLSB)和无状态会话Bean(SFSB)的区别1   无状态   (Stateless)        在不同方法调用间不保留任何状态   。     事务处理必须在一个方法中结...
  • hippoppower
  • hippoppower
  • 2009年05月15日 19:03
  • 5735

EJB学习笔记三(有状态和无状态SessionBean的区别)

1.前言 在EJB概述的博客中也曾提到过EJB3.0中的SessionBean的两种状态,下面呢,通过本篇博客深入的分析一下,两种状态的SessionBean到底有何区别。  2.开发一个有状...
  • ZHOUCHAOQIANG
  • ZHOUCHAOQIANG
  • 2015年07月28日 16:22
  • 2466

Ejb-有状态&无状态SessionBean

1.    Ejb的分类   首先,企业级Bean分为三类:      SessionBean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Sess...
  • wang379275614
  • wang379275614
  • 2015年02月14日 22:04
  • 1335

jboss3.2.3下无状态sessionBean的成功例子

OS环境:     windows xp sp2server:      jboss3.2.2ejb version: 2.0看了一些书本和网上的例子,运行总会碰到一些问题,经过总结,发现了一些问题没...
  • esqm
  • esqm
  • 2008年03月29日 13:31
  • 394

SSH深度历险(三) EJB Session Bean有状态和无状态的区别与联系

等等通过实例自己实践之后的清晰了很多,多动手多动手,TO Do TO DO !
  • lishehe
  • lishehe
  • 2014年06月05日 10:24
  • 3078

EJB - 无状态SessionBean简单示例

示例环境: (理论上使用最新版会比较好, 但是因为某些原因,使用如下环境) 1. jdk1.5.0_14 2. Eclipse 3.7 3. jboss-4.2.2.GA 步骤...
  • oscar999
  • oscar999
  • 2012年09月05日 10:15
  • 2288

有状态session bean和无状态session bean的区别

现实中,很多朋友对两种session bean存在误解,认为有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用,而认为无状态是每次调用实例化一次,不保留用户信息。仔细分析并用实践检验后,...
  • kong0609
  • kong0609
  • 2011年03月29日 10:24
  • 1244

有状态会话Bean实例

K:/test23/ejb/src/StatefulHome.javapackage ejbs;public interface StatefulHome extends javax.ejb.EJBH...
  • ggjjzhzz
  • ggjjzhzz
  • 2005年03月16日 17:06
  • 954

Spring Bean Scope 有状态的Bean 无状态的Bean

在Spring的Bean配置中,存在这样两种情况: [xhtml] view plaincopy bean id="testManager" class="com.sw.Tes...
  • cs408
  • cs408
  • 2015年08月20日 16:08
  • 1988

维护用户状态——Spring中session bean的使用

维护用户状态——Spring中session bean的使用
  • u012345283
  • u012345283
  • 2015年01月16日 10:39
  • 2513
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:什么时候用有状态session bean,什么时候用无状态session bean
举报原因:
原因补充:

(最多只允许输入30个字)