Session Bean:分有状态会话Bean和无状态会话Bean两种,主要目的是提供程序逻辑层;
Entity Bean:资料组件,主要目的是提供程序资料;
下面主要对Session Bean讨论
现实中,很多朋友对两种session bean存在误解,认为有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用,而认为无状态是每次调用实例化一次,不保留用户信息。仔细分析并用实践检验后,你会发现,事实恰好相反:
有状态和无状态会话bean的本质区别是它们的生命期。
首先解释一个下面要用到的概念--用户:session bean 的用户实际上就是直接调用ejb的类的实例,甚至是这个实例的某个方法。同一个类的不同实例对于session bean 来说是不同的用户。
有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。
无状态会话bean :bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的。
区别的根本原因
这与无状态会话Bean和有状态会话Bean的运行原理是相关的。
对于有状态会话Bean来说,只要有客户端发送对有状态会话Bean的访问,服务器都会创建一个会话Bean实例与该客户端对应,这样这个实例与这个客户端就是一一对应的。如果客户端在Bean实例中保存了信息,之后还可以使用。
对 于无状态会话Bean来说,服务器端会维持一个实例池,创建好若干个实例对象供客户端调用。当从客户端发送创建会话Bean的请求时,并不一定会真的创建 EJB,多数情况下是从实例池中得到一个实例,用完之后重新放回实例池。如果下次再访问,再从实例池中取出一个实例使用,并不一定是上次的实例。即使两次 访问使用的是同一个实例,在两次访问之间也有可能有其他的客户端访问了该实例。所以,并不能保证在多次访问之间的信息会被保存。所以,无状态会话Bean 不会专门保存客户端的信息。
各自的优缺点
因 为有状态会话Bean需要保存特定客户端的信息,一个客户端对应一个实例,既是在当时客户端有连接没有访问的情况下,也要为这个客户端保留这个实例。这样随着客户端数量的增加,服务器端需要创建的实例的数量也在增加,增加到一定程度对服务器的性能就会有一定的影响。为了不对服务器的性能产生影响,通常服务 器会进行一些优化。当客户端的数量超过某个值之后,就不创建新的实例。虽然不创建新的实例,还是需要对用户响应,这时候就采用共享实例的方式。会查看哪个 实例虽然处于连接状态,但是没有访问,然后把这个实例的状态保存起来,使用这个实例为新的请求服务,对于原来的客户端来说,称为挂起。如果原来的客户端又 发送请求了,会重新查找一个空闲的实例并且把已经保存好的状态恢复回来,这个过程称为激活。所以在有状态会话Bean的访问过程,经常会发生查找实例,激 活挂起等操作,所以效率比较低。
而发送对无状态会话Bean的请求的时候,可以随便取一个空闲的实例为客户端服务,所以效率比较高。
有状态会话Bean的好处是,可以保存客户端的状态,所以客户端在后续访问的时候就可以少传递一些参数。而无状态会话Bean需要传递方法执行过程中需要的所有参数。
如何选择
根据上面分析的有状态会话Bean和无状态会话Bean的优缺点。如果要频繁的访问,并且多次访问之间会共享一些信息,这时候应该使用有状态会话Bean。对于不经常使用的功能,可以使用无状态会话Bean。无状态会话Bean的使用要比有状态会话Bean的使用多。
分享到:
相关推荐
- **会话Bean (Session Bean)**:分为有状态和无状态两种,用于封装业务逻辑操作。 - **消息驱动Bean (Message-Driven Bean)**:处理JMS(Java Message Service)消息。 ### 2. 有状态会话Bean (Stateful Session ...
有状态会话Bean(Stateful Session Bean,SFSB)与无状态会话Bean(Stateless Session Bean, SLSB)的主要区别在于它们如何维护与客户端之间的交互状态。SLSB不存储任何关于客户端的信息,每次方法调用都是独立的,...
这个系统涵盖了多种JavaEE核心技术,包括Servlet、Java Persistence API (JPA)、有状态会话Bean(Stateful Session Beans, SFSB)、无状态会话Bean(Stateless Session Beans, SLSB)、Web服务(Webservice)、Java...
在传统的EJB 2.x时代,`ejbCreate`方法被用于无状态会话bean(Stateless Session Beans, SLSB)和有状态会话bean(Stateful Session Beans, SFSB)的实例化过程。对于SLSB,`ejbCreate`会在每次客户端请求一个新的...
SLSB带接口的远程演示具有接口但具有仅WAR部署的现代Java EE EJB的演示。 Bean类同时使用@LocalBean和@Remote进行注释,并且都被注入到JSF托管Bean中并直接使用。
在EJB 2.x版本中,`ejbCreate`方法是无状态会话Bean(Stateless Session Bean, SLSB)和有状态会话Bean(Stateful Session Bean, SFSB)的标准生命周期方法之一。当EJB容器创建一个新的Bean实例时,会自动调用这个...
- **有状态会话bean(Stateful Session Beans, SFSB)**:可以跟踪客户端状态,常用于购物车或个性化推荐等场景。 - **消息驱动bean(Message Driven Beans, MDB)**:用于处理JMS消息,实现异步处理。 **EJB开发...
主要的EJB类型包括:无状态会话Bean(Stateless Session Beans, SLSB)、有状态会话Bean(Stateful Session Beans, SFSB)、消息驱动Bean(Message-Driven Beans, MDB)以及实体Bean(Entity Beans,通常使用JPA进行...
Java EE 5.0简化了EJB,引入了无状态会话bean(Stateless Session Beans, SLSB)和有状态会话bean(Stateful Session Beans, SFSB),并提供了实体bean(Entity Beans)的注解驱动模式,使得部署和配置更加简单。...
2. **Stateless Session Beans (SLSB)**:Java EE中的无状态会话bean,用于执行业务逻辑,不保存任何会话数据,适合处理大量短暂的、独立的请求。 3. **@LocalBean** 和 **@Remote** 注解:在EJB中,这些注解分别...
SLSB(状态会话bean)是一种特殊类型的EJB(Enterprise JavaBeans),用于保存用户会话的状态信息。在“chapter03_jpa_slsb_exec2”和“chapter03_jpa_slsb_exec_client”中,可能会讲解如何在Java EE应用中集成JPA...
- 开发目标:利用SLSB(无状态会话Bean)和EJB(Enterprise JavaBeans)开发一个分布式计算系统,实现客户端查询软件工程0901-0905班的选课名单功能。 - **实验基本原理与设计**: - 新建Java EE企业应用程序(whutx)...
SLSB算法与传统的LSB隐写术算法相比,其最大的区别在于它不是利用每个像素颜色分量的所有LSB位来嵌入信息,而是只选择特定的像素颜色分量的LSB位。这一改进不仅提高了信息嵌入的效率,还减少了对图像原始质量的影响...
例如,SLSB(无状态会话Bean)的滥用可能导致性能下降,应考虑是否真的需要远程调用,以及是否有更合适的技术替代。 总结来说,大型Web项目调优是一个多层面的过程,需要综合考虑架构设计、框架选择、数据库优化、...
2. **会话Bean(Session Bean)**:提供业务逻辑,可以是无状态的(Stateless Session Bean)或有状态的(Stateful Session Bean)。 3. **消息驱动Bean(Message Driven Bean)**:用于处理JMS(Java Message ...
4. `<jee:local-slsb>`和`<jee:remote-slsb>`:分别用于声明本地和远程的Stateless Session Beans(无状态会话Bean)。这两个元素需要配置EJB的接口和实现类。 5. `<jee:jms-destination>`和`...
- **EJB3 Stateless Session Bean (SLSB)**:这是一种轻量级的会话Bean,主要用于实现无状态的服务端业务逻辑。 #### 集群配置方式 JBoss AS 5提供了多种集群配置方式,以满足不同场景的需求。集群配置通常涉及...
- **中间层**:利用无状态会话Bean (SLSB) + DAO + Helper类实现,部署在3台WebLogic服务器上,并通过F5实现负载均衡。 - **数据库层**:包含两台Oracle数据库服务器(分别用于存储用户信息和业务数据),以及一台...