对于很多EJB的初学者,很多时候对有状态、无状态会话bean有一些误解。我给大家简单的介绍一下
现实中,很多朋友对两种session bean存在误解,认为有状态是实例一直存在,保存每次调用后的状态,并对下一次调用起作用,而认为无状态是每次调用实例化一次,不保留用户信息。仔细分析并用实践检验后,你会发现,事实恰好相反:
有状态和无状态会话bean的本质区别是它们的生命期。
首先解释一个下面要用到的概念--用户:session bean 的用户实际上就是直接调用ejb的类的实例,甚至是这个实例的某个方法。同一个类的不同实例对于session bean 来说是不同的用户。
1)有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。生命周期我们可以用web中context去简单认识,比如session、request等。在这个生命周期内,用户只会得到一个特定的stateful会话bean。
2)无状态会话bean :bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的。
这两种bean的使用场合简析:
1)有状态会话bean:用于跟踪用户数据,它可以在分布式中被缓存和传递,只要生命周期未被销毁(如session会话,前提是此会话bean被session会话管理),那么此bean可以在应用中随时获取,且数据时被同步更新的。。它就像你的“妻子”,你要你还“爱她”,她会随你“一生”
场合:用户登录权限切片控制,购物车等
2)无状态会话bean:这里你需要用servlet的思想去认识它,它就想servlet一样,为上层调用提供服务,并且是线程池的形式存在。当服务调用结束(如:获取web 服务,查询站点数据统计),无状态会话bean可能被销毁但也能继续存在,取决于线程池饱和度,但它不会为你保存任何和你的调用有“个人私情”的数据。你就认为他是一个servlet,它是提供共享服务的,它不是“老婆”,更像给你送邮件的“邮递员”,你们直接的交易,只是在你需要的时候,并以及结束。
现在你明白了吗??别搞混了额,别把“邮递员”当“老婆”,但更不希望你把“老婆”当“邮递员”。。。。
分享到:
相关推荐
NULL 博文链接:https://fruitking.iteye.com/blog/562868
实战EJB之三 开发会话Bean(有状态会话Bean).doc
NULL 博文链接:https://diaochenlong2.iteye.com/blog/1846828
环境:Window XP profession, JDK 1.6, MySQL 5.0, JBoss...该示例使用EJB 3.0的无状态会话Bean呼叫JPA持久层完成数据库的操作,推荐广大企业级Java程序员项目中使用。 注意:连接池的配置参见上一个资源readme.txt文档
该示例使用Eclipse 3.3 Europa IDE、JDK 6.0、GlassFish 2.0翻写的第一个EJB 3.0会话bean应用。注意:必须首先安装GlassFish服务器,可以通过安装NetBean 6.0(M9)来完成安装该服务器,或能单独安装也行,然后在...
广东工业大学Java EE Web编程技术课程实验,使用JBoss,实现EJB技术中的会话Bean,简单的Helloworld。
JavaEE5学习笔记05-EJB之会话Bean总结...
java ee 6 ejb的一些实例: 包括 有状态会话bean 无状态会话bean 单身会话bean 消息驱动bean 实例
EJB3.0的源代码,包含会话Bean,实体Bean,还有消息Bean
EJB3示例 有状态和无状态会话bean,其中Test.jsp页面是用于测试远程无状态会话bean页面,可放到时其它web项目中访问,但于分布式测试。
试验目的:通过对简单会话Bean组件的编写,加深对EJB理论知识的理解,为更深层的EJB应用做准备。 试验任务:设计一个会话Bean,进行计数。将当前的计数值存储在Bean中,当客户端请求时,调用计数函数,进行计数累加...
试验目的:通过对简单无状态会话Bean组件的编写,加深对EJB理论知识的理解,为更深层的EJB应用做准备。 试验任务:根据EJB组件的结构体系和运行机理,编写实现显示“Hello,+班级+姓名!”的无状态会话Bean组件,并...
介绍EJB入门基础,详细介绍会话BEAN.
EJB3.0开发Message Driven Bean
JAVAEE7 有状态会话bean项目,源代码,EJB3.2,JSF2.2,stateful sessionBean(环境:netbeans8.1,NetBeans自带glassfish4.1,JDK7) 可以用于初学者学习有状态会话bean 下载后,解压,直接导入netbeans8.1即可
想指定Java Bean作为无状态的会话bean加以部署及管理,只需要为该bean添加注释@Stateless。 有状态的会话 bean在方法调用时可保持对话状态,譬如客户的网上购物车。客户开始网上购物时,可以从数据库中检索客户的...
EJB3.0开发Message Driven Bean.rar EJB3.0开发Message Driven Bean.rar
Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来...
初学Ejb者使用,开发了一个购物车的简单点的案例