[size=medium]引用:http://blog.youkuaiyun.com/xueyepiaoling/article/details/6107624
默认情况下,从bean工厂所取得的实例为Singleton(bean的singleton属性) Singleton: Spring容器只存在一个共享的bean实例,
默认的配置。 Prototype: 每次对bean的请求都会创建一个新的bean实例。二者选择的原则:有状态的bean都使用Prototype作用域
,而对无状态的bean则应该使用singleton作用域。
在 Spring2.0中除了以前的Singleton和Prototype外又加入了三个新的web作用域,分别为request、session和 global session。如
果你希望容器里的某个bean拥有其中某种新的web作用域,除了在bean级上配置相应的scope属性,还必须在容器级做一个额外的初始
化配置。即在web应用的web.xml中增加这么一个ContextListener:
org.springframework.web.context.request.RequestContextListener 以上是针对Servlet 2.4以后的版本。比如Request作用域!
引用:http://wdlisoft.javaeye.com/blog/479049
singleton是单态模式的 ,有ioc容器管理 ,当然不是线程安全的啦 ,不过所谓的线程安全也是相对的
如果你的类是没有状态的, 那用singleton 的性能要高一些 ,因为只有一个实例 。
如果你的类是有状态的 ,那就必须显示的设置为prototype了
在ssh2 项目中 , struts2的action交由spring管理的时候 ,spring默认是singleton的 ,而struts2的action显然是有状态的 ,所以必须显示设置为
scope=“prototype”
prototype为原型模式 , 每次action请求过来都会创建一个action
但是对那些Dao的实现类推介scope=“singleton” ,因为这些类没有状态,用singleton只需维护一个实例,显然性能高一些
有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。
无状态会话bean :bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的
(转)http://bbs.youkuaiyun.com/topics/350130788
很多朋友对两种session bean存在误解,认为有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用,而认为无状态是每次调用实例化一次,不保留用户信息。仔细分析并用实践检验后,你会发现,事实恰好相反:
有状态和无状态会话bean的本质区别是它们的生命期。
首先解释一个下面要用到的概念--用户:session bean 的用户实际上就是直接调用ejb的类的实例,甚至是这个实例的某个方法。同一个类的不同实例对于session bean 来说是不同的用户。
有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。
无状态会话bean :bean 一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的。
实体bean:
一个session bean 代表与客户程序的一个短暂的会话,而且可能执行数据库读写操作。一个session bean 可能会自己调用JDBC ,或者它可能使用entity bean 来完成此种调用。在后者这种情况下,这个session bean 是该entity bean 的客户。一个session bean 的域包含会话状态,而且是短暂的。如果服务器或者客户程序崩溃,该session bean 就丢失了。这种模式通常被用于像PL/SQL 这样的数据库程序设计语言上 。
一个entity bean 代表一个数据库中的数据及作用于该数据的方法。在一个关系型数据库中的雇员信息表中,每一行都有一个bean 来代表。entity beans 是事务的,并且是长寿命的。只要数据留在数据库中,entity bean 就存在。这个模式可以被很容易地用于关系型数据库,而不仅限于对象数据库。
Session beans 可以是有状态的,也可以是无状态的。一个有状态的session bean 包含代表客户程序的会话状态。该会话状态是该session bean 实例的域值加上这些域值所引用到的所有对象。有状态session beans 并不代表在一个持久数据存储中的数据,但是,它可以代表客户程序访问和更新数据。
无状态session beans 没有用于某个特定客户程序的任何状态信息。它们通常被用于提供不保持任何特定状态的服务器端行为。无状态session beans 要求更少的系统资源。一个提供一种一般服务,或用于表示被存储的数据的一个被共享的视图的业务对象是无状态session bean的一个例子 。
会话bean 和实体bean的选择:
如果想要使你的项目扩展性更好通常这样处理:
凡是涉及到数据库的就用实体Bean,然后定义一个会话Bean,客户必须通过会话Bean才能访问实体Bean,当然,如果你的查询要求返回的数据量很大,也可以直接利用会话BEAn访问数据库,不过,这并不是良好的设计。
会话Bean与实体Bean有时候是很难选择的,就想选择.NET与Java一样,是个态度问题。原则上与数据库打交道的地方都应该采取实体Bean,但是实际采用中如果采取这种方式的,势必性能会很糟糕,所以实际中对于那些涉及到批数据量的操作时还要采取会话Bean。
一般要结合你自己的项目的特点而采取相应的对策!
如果数据量不大,可以考虑用实体bean,并且一般不会用实体bean来实现大量数据的查询,如模糊查询,实体bean在实际应用中一般用做删除,精确查询,更新,因为每一个实体bean都会在内存中占用相对较大的空间,所以如果较大的实体bean查询结果会直接导致服务器down机(虽然ejb容器一般都有钝化,激活功能)。通常都是用会话bean来通过datasource来直接操作数据库
EJB 分为三类
A、会话bean : 只针对特定的客户端
1.有状态的会话bean;
2.无状态的会话bean
B、实体bean : 用户之间可以共享的bean
实体bean是:提供在数据库中数据的对象视图..
·允许被多个用户共享存取访问
。可以是长期存在.. (只要它存在于数据库中)
。实体Bean,它的主键对象,以及它的远程引用将能跨.. EJB容器的宕机而
存在
实体Bean用于表示保存在持久数据存储机制中的实体,为这些实体提供面向
对象的视图,如关系型数据库中的业务实体数据,或传统业务系统中的业务实体
一个实体Bean描述一个持久存储备的商业对象。商业对象的例子如:消费者,订
单和产品等。在J2E
EESDK中持久存储设备是一个关系型数据库。最典型的情况是
一个实体Bean又一个在地层数据库中有一个表相对应,而实体Bean的每一个实
例对应表中的一行数据。
实体Bean有一下特征:
1)实体Bean可以幸免于故障..
2)实体Bean实例是一个对应到数据库中的视图..
3)几个实体Bean实例可能代表同一底层数据..
4)实体Bean实例可以被收集并再利用
C、消息驱动Bean:作为JMS(Java Messsage Service Java消息服务) API的监听者异步处理监听到的消息
会话BEAN详解
4.2会话.. Bean
4.2.1什么是会话.. Bean
会话.. Bean(会话.. Bean):根据.. EJB规范,一个会话.. Bean是:
。代表单个客户端来执行
。可以参与到事务处理中
。不直接代表共享于数据库中的数据,但它能访问和更新这些数据
。相对而言是短暂存在的..
·当EJB容器失效后就不存在-一客户端需要重新建立一个信新的会话对象来
继续运算
会话.. Bean可被视为客户端程序在服务器上的部分逻辑延伸,每会话.. Bean对
象对应于特定的客户端,不能在多个客户端间共享。换句话说,会话.. Bean用于表
示运行于服务器端的部分业务过程,作为客户端的代理,管理业务过程或任务,
如客户对账户的借贷操作、汇率的计算,等等这些涉及逻辑、算法和工作流的种
种任务。这些过程都是特定的客户行为,EJB根据这些过程在运行时创建过程实例、
执行计算或者清除实例。..
4.2.2会话.. Bean的分类
根据状态管理模式的不同会话Bean可以分为两类:有状态.. (stateful)会话..
Bean和无状态.. (stateles
ss)会话Bean.
1)有状态会话Bean
一个对象的状态由它的成员变量.. (数据成员)的状态决定。有状态会话Bean
的成员变量描述一个唯一的客户端一会话Bean的关联状态。因为客户端要与对应
的会话B ea。进行对话,所以这种状态通常被叫做会话状态。当一个客户端与某一
个有状态的会话E JB开启一个会话时,这个E JB为客户端维护了一个会话状态。
这暗示着客户端向此E JB发出不同调用请求之间保证E JB的成员变量值不会丢失。
会话状态在整个会话期间被保留。如果客户端运行结束或者删除对应的会话..
Bean,这个会话就结束同时状态被清除。这种状态的短暂性并不是问题,相反,
如果客户端和会话B ean的对话结束就不必要在保留会话的状态了。一旦客户端结
束与有状态的会话E JB的交互后,.. EJB容器会自动销毁它。于是整个会话结束,并
且此有状态的会话E JB所保存的状态数据会全部丢失。..
2)无状态会话B ean
无状态会话B ean并不为客户端保留会话状态。在客户端调用无状态会话B ean
的方法时,对应会话B ean的数据成员会描述这个调用状态,但只在该方法调用期
间保持这个状态。当方法调用结束,状态就被清除。除了在方法调用期间,所有
同一个无状态会话B ean实例是等价的,可以被容器分配给任一客户端。
因为无状态会话B ean可以同时支持多个客户端,所以能更好的支持应用程序
的可数的大量客户端。很明显,对支持相同数量的客户端的应用程序,需要的无
状态会话B ean会比有状态会话B ean要少。
有时,E JB容器会在没有请求的时候把有状态会话B ean保存在内存(二级存
储器S econdStorage)中。不管什么时候,没有请求时无状态会话B ean都不会被
保存中。所以,无状态会话B ean会比有状态会话B ean有更高的性能。..
4. 2.3会话日.. an的生命周期..
1)有状态会话.. Bean的生存周期如下图所示:
1.treate
2.essinnet
stesoCotx
3.旬bC饱欲e
图.. 4 -2有状态会话.. B ean的生存周期
会话.. Bean的生存周期开始于客户端对create方法的调用。随后,EJB容器
调用组件类的setSes
会话.. Bean的生存周期开始于客户端对create方法的调用。随后,EJB容器
调用组件类的setSeionContext方法和ejbCreate方法。现在,E丁B进入就绪状
态,可以进行业务方法的用。
对处于就绪状态的EJB,容器可以决定是否将其从内存中转移到二级存储器,
然后调用ejbPas
ssivate方法,使EJB进入钝化状态。当客户端对处于钝化状态的..
EJB调用业务方法时,容器激活EJB,将其转移到就绪状态,然后调用EJB的..
ejbActivate方法。
当客户端调用remove方法,EJB容器调用EJB的ejbRemove方法,然后,EJB
完成其生存周期,可以对其进行垃圾回收。
客户端代码对有状态会话.. Bean生存周期的控制只能通过create和remove方
法。其他方法由EJB容器进行调用。..
2)无状态会话Bean的生存周期
因无状态会话Bean不会进行被钝化操作,因此,其生存周期只有两个阶段,
不存在和就绪状态。
下图表示无状态会话.. Bean的生存周期:
l.rae
cet
I.remove
2.esinnet
s巧e soCotx2.jev
ebRmoe
3.jCet
ebrae
准备
图.. 4-3无状态会话.. Bean的生存周期..
4.2.4会话Bea。的使用场合
通常,在出现以下几种情况时需要用会话Bean:
1)在任何给定时间,只有一个客户端访问这个Bean的实例。..
2)Bean的状态并不需要持久保存,只在一个时间段内保持。
在以下情况下,建议采用有状态会话Bean:
1)Bean需要描述一个于特定客户端的会话状态
2)Bean需要在客户端的多个方法调用之间保存调用信息..
2)Bean需要在客户端的多个方法调用之间保存调用信息..
4)在调用接口里,Bean管理很多企业Bean的工作流。
在以下情况下,为了得到更高的性能应该选择无状态会话Bean:
1)Bean的状态不包含客户端相关的数据..
2)在一个单一方法调用中,Bean己经可以为客户端完成所需要的工作。例如
你可以用无状态会话Bean发一封邮件确认网络订单。..
3)Bean需要从数据库获取一些客户端经常访问的只读数据。例如可以用这样
的Bean来访问数据表中代表这个月已经卖出的产品的行。..
[/size]
默认情况下,从bean工厂所取得的实例为Singleton(bean的singleton属性) Singleton: Spring容器只存在一个共享的bean实例,
默认的配置。 Prototype: 每次对bean的请求都会创建一个新的bean实例。二者选择的原则:有状态的bean都使用Prototype作用域
,而对无状态的bean则应该使用singleton作用域。
在 Spring2.0中除了以前的Singleton和Prototype外又加入了三个新的web作用域,分别为request、session和 global session。如
果你希望容器里的某个bean拥有其中某种新的web作用域,除了在bean级上配置相应的scope属性,还必须在容器级做一个额外的初始
化配置。即在web应用的web.xml中增加这么一个ContextListener:
org.springframework.web.context.request.RequestContextListener 以上是针对Servlet 2.4以后的版本。比如Request作用域!
引用:http://wdlisoft.javaeye.com/blog/479049
singleton是单态模式的 ,有ioc容器管理 ,当然不是线程安全的啦 ,不过所谓的线程安全也是相对的
如果你的类是没有状态的, 那用singleton 的性能要高一些 ,因为只有一个实例 。
如果你的类是有状态的 ,那就必须显示的设置为prototype了
在ssh2 项目中 , struts2的action交由spring管理的时候 ,spring默认是singleton的 ,而struts2的action显然是有状态的 ,所以必须显示设置为
scope=“prototype”
prototype为原型模式 , 每次action请求过来都会创建一个action
但是对那些Dao的实现类推介scope=“singleton” ,因为这些类没有状态,用singleton只需维护一个实例,显然性能高一些
有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。
无状态会话bean :bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的
(转)http://bbs.youkuaiyun.com/topics/350130788
很多朋友对两种session bean存在误解,认为有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用,而认为无状态是每次调用实例化一次,不保留用户信息。仔细分析并用实践检验后,你会发现,事实恰好相反:
有状态和无状态会话bean的本质区别是它们的生命期。
首先解释一个下面要用到的概念--用户:session bean 的用户实际上就是直接调用ejb的类的实例,甚至是这个实例的某个方法。同一个类的不同实例对于session bean 来说是不同的用户。
有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。
无状态会话bean :bean 一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的。
实体bean:
一个session bean 代表与客户程序的一个短暂的会话,而且可能执行数据库读写操作。一个session bean 可能会自己调用JDBC ,或者它可能使用entity bean 来完成此种调用。在后者这种情况下,这个session bean 是该entity bean 的客户。一个session bean 的域包含会话状态,而且是短暂的。如果服务器或者客户程序崩溃,该session bean 就丢失了。这种模式通常被用于像PL/SQL 这样的数据库程序设计语言上 。
一个entity bean 代表一个数据库中的数据及作用于该数据的方法。在一个关系型数据库中的雇员信息表中,每一行都有一个bean 来代表。entity beans 是事务的,并且是长寿命的。只要数据留在数据库中,entity bean 就存在。这个模式可以被很容易地用于关系型数据库,而不仅限于对象数据库。
Session beans 可以是有状态的,也可以是无状态的。一个有状态的session bean 包含代表客户程序的会话状态。该会话状态是该session bean 实例的域值加上这些域值所引用到的所有对象。有状态session beans 并不代表在一个持久数据存储中的数据,但是,它可以代表客户程序访问和更新数据。
无状态session beans 没有用于某个特定客户程序的任何状态信息。它们通常被用于提供不保持任何特定状态的服务器端行为。无状态session beans 要求更少的系统资源。一个提供一种一般服务,或用于表示被存储的数据的一个被共享的视图的业务对象是无状态session bean的一个例子 。
会话bean 和实体bean的选择:
如果想要使你的项目扩展性更好通常这样处理:
凡是涉及到数据库的就用实体Bean,然后定义一个会话Bean,客户必须通过会话Bean才能访问实体Bean,当然,如果你的查询要求返回的数据量很大,也可以直接利用会话BEAn访问数据库,不过,这并不是良好的设计。
会话Bean与实体Bean有时候是很难选择的,就想选择.NET与Java一样,是个态度问题。原则上与数据库打交道的地方都应该采取实体Bean,但是实际采用中如果采取这种方式的,势必性能会很糟糕,所以实际中对于那些涉及到批数据量的操作时还要采取会话Bean。
一般要结合你自己的项目的特点而采取相应的对策!
如果数据量不大,可以考虑用实体bean,并且一般不会用实体bean来实现大量数据的查询,如模糊查询,实体bean在实际应用中一般用做删除,精确查询,更新,因为每一个实体bean都会在内存中占用相对较大的空间,所以如果较大的实体bean查询结果会直接导致服务器down机(虽然ejb容器一般都有钝化,激活功能)。通常都是用会话bean来通过datasource来直接操作数据库
EJB 分为三类
A、会话bean : 只针对特定的客户端
1.有状态的会话bean;
2.无状态的会话bean
B、实体bean : 用户之间可以共享的bean
实体bean是:提供在数据库中数据的对象视图..
·允许被多个用户共享存取访问
。可以是长期存在.. (只要它存在于数据库中)
。实体Bean,它的主键对象,以及它的远程引用将能跨.. EJB容器的宕机而
存在
实体Bean用于表示保存在持久数据存储机制中的实体,为这些实体提供面向
对象的视图,如关系型数据库中的业务实体数据,或传统业务系统中的业务实体
一个实体Bean描述一个持久存储备的商业对象。商业对象的例子如:消费者,订
单和产品等。在J2E
EESDK中持久存储设备是一个关系型数据库。最典型的情况是
一个实体Bean又一个在地层数据库中有一个表相对应,而实体Bean的每一个实
例对应表中的一行数据。
实体Bean有一下特征:
1)实体Bean可以幸免于故障..
2)实体Bean实例是一个对应到数据库中的视图..
3)几个实体Bean实例可能代表同一底层数据..
4)实体Bean实例可以被收集并再利用
C、消息驱动Bean:作为JMS(Java Messsage Service Java消息服务) API的监听者异步处理监听到的消息
会话BEAN详解
4.2会话.. Bean
4.2.1什么是会话.. Bean
会话.. Bean(会话.. Bean):根据.. EJB规范,一个会话.. Bean是:
。代表单个客户端来执行
。可以参与到事务处理中
。不直接代表共享于数据库中的数据,但它能访问和更新这些数据
。相对而言是短暂存在的..
·当EJB容器失效后就不存在-一客户端需要重新建立一个信新的会话对象来
继续运算
会话.. Bean可被视为客户端程序在服务器上的部分逻辑延伸,每会话.. Bean对
象对应于特定的客户端,不能在多个客户端间共享。换句话说,会话.. Bean用于表
示运行于服务器端的部分业务过程,作为客户端的代理,管理业务过程或任务,
如客户对账户的借贷操作、汇率的计算,等等这些涉及逻辑、算法和工作流的种
种任务。这些过程都是特定的客户行为,EJB根据这些过程在运行时创建过程实例、
执行计算或者清除实例。..
4.2.2会话.. Bean的分类
根据状态管理模式的不同会话Bean可以分为两类:有状态.. (stateful)会话..
Bean和无状态.. (stateles
ss)会话Bean.
1)有状态会话Bean
一个对象的状态由它的成员变量.. (数据成员)的状态决定。有状态会话Bean
的成员变量描述一个唯一的客户端一会话Bean的关联状态。因为客户端要与对应
的会话B ea。进行对话,所以这种状态通常被叫做会话状态。当一个客户端与某一
个有状态的会话E JB开启一个会话时,这个E JB为客户端维护了一个会话状态。
这暗示着客户端向此E JB发出不同调用请求之间保证E JB的成员变量值不会丢失。
会话状态在整个会话期间被保留。如果客户端运行结束或者删除对应的会话..
Bean,这个会话就结束同时状态被清除。这种状态的短暂性并不是问题,相反,
如果客户端和会话B ean的对话结束就不必要在保留会话的状态了。一旦客户端结
束与有状态的会话E JB的交互后,.. EJB容器会自动销毁它。于是整个会话结束,并
且此有状态的会话E JB所保存的状态数据会全部丢失。..
2)无状态会话B ean
无状态会话B ean并不为客户端保留会话状态。在客户端调用无状态会话B ean
的方法时,对应会话B ean的数据成员会描述这个调用状态,但只在该方法调用期
间保持这个状态。当方法调用结束,状态就被清除。除了在方法调用期间,所有
同一个无状态会话B ean实例是等价的,可以被容器分配给任一客户端。
因为无状态会话B ean可以同时支持多个客户端,所以能更好的支持应用程序
的可数的大量客户端。很明显,对支持相同数量的客户端的应用程序,需要的无
状态会话B ean会比有状态会话B ean要少。
有时,E JB容器会在没有请求的时候把有状态会话B ean保存在内存(二级存
储器S econdStorage)中。不管什么时候,没有请求时无状态会话B ean都不会被
保存中。所以,无状态会话B ean会比有状态会话B ean有更高的性能。..
4. 2.3会话日.. an的生命周期..
1)有状态会话.. Bean的生存周期如下图所示:
1.treate
2.essinnet
stesoCotx
3.旬bC饱欲e
图.. 4 -2有状态会话.. B ean的生存周期
会话.. Bean的生存周期开始于客户端对create方法的调用。随后,EJB容器
调用组件类的setSes
会话.. Bean的生存周期开始于客户端对create方法的调用。随后,EJB容器
调用组件类的setSeionContext方法和ejbCreate方法。现在,E丁B进入就绪状
态,可以进行业务方法的用。
对处于就绪状态的EJB,容器可以决定是否将其从内存中转移到二级存储器,
然后调用ejbPas
ssivate方法,使EJB进入钝化状态。当客户端对处于钝化状态的..
EJB调用业务方法时,容器激活EJB,将其转移到就绪状态,然后调用EJB的..
ejbActivate方法。
当客户端调用remove方法,EJB容器调用EJB的ejbRemove方法,然后,EJB
完成其生存周期,可以对其进行垃圾回收。
客户端代码对有状态会话.. Bean生存周期的控制只能通过create和remove方
法。其他方法由EJB容器进行调用。..
2)无状态会话Bean的生存周期
因无状态会话Bean不会进行被钝化操作,因此,其生存周期只有两个阶段,
不存在和就绪状态。
下图表示无状态会话.. Bean的生存周期:
l.rae
cet
I.remove
2.esinnet
s巧e soCotx2.jev
ebRmoe
3.jCet
ebrae
准备
图.. 4-3无状态会话.. Bean的生存周期..
4.2.4会话Bea。的使用场合
通常,在出现以下几种情况时需要用会话Bean:
1)在任何给定时间,只有一个客户端访问这个Bean的实例。..
2)Bean的状态并不需要持久保存,只在一个时间段内保持。
在以下情况下,建议采用有状态会话Bean:
1)Bean需要描述一个于特定客户端的会话状态
2)Bean需要在客户端的多个方法调用之间保存调用信息..
2)Bean需要在客户端的多个方法调用之间保存调用信息..
4)在调用接口里,Bean管理很多企业Bean的工作流。
在以下情况下,为了得到更高的性能应该选择无状态会话Bean:
1)Bean的状态不包含客户端相关的数据..
2)在一个单一方法调用中,Bean己经可以为客户端完成所需要的工作。例如
你可以用无状态会话Bean发一封邮件确认网络订单。..
3)Bean需要从数据库获取一些客户端经常访问的只读数据。例如可以用这样
的Bean来访问数据表中代表这个月已经卖出的产品的行。..
[/size]