会话Bean同其他企业Bean类型的最主要的区别是生命周期的差异性。相比之下,会话Bean实例是存活短暂的对象。粗略地看,它同会话(Session)或调用其客户的生命周期类似,而且,会话Bean实例并不能够在多客户间共享,而且它不表示数据库中的数据。
比如,如果客户代码调用用于完成订单登记的会话Bean,则EJB容器需要完成会话Bean组件实例的创建。在后续操作中,如果客户不再与该实例交互,应用服务器有可能会销毁它。从客户视图看待,Bean实例开始于客户获得其引用时,而终止于客户会话的终结。在客户会话开始前或终止后的时间里面,Bean实例是否存在真的是未知数。
在客户将浏览器打开后,并在客户关闭它之前,这段时间可能构成了客户会话的持续期。期间,客户有可能连接到已部署了会话Bean的电子商务网站上。当然,客户会话的持续期也有可能是Java Applet运行期间、单独Java应用的打开时间、访问某企业Bean实例的其他企业Bean实例的存活时间等。
通常,客户会话(Client Session)的持续期决定了使用中的会话Bean的存活期,这就是术语“会话Bean”的来源。EJB容器管理了EJB组件的生命周期,如果客户超时,EJB容器将销毁会话Bean实例。如果客户使用某会话Bean实例持续了10分钟,则该会话Bean实例有可能存活几分钟或几小时,但是,不会是几周、几个月或者几年时间。而且,一旦应用服务器(或者运行它的机器)瘫痪,会话Bean实例也应该不复存在。因为,会话Bean仅仅是内存对象,一旦其生存的周边环境遭到破坏,会话Bean也将不复存在。
相比之下,由于实体Bean是持久化对象,因此实体Bean能够存活数月或者数年。实体Bean是永久性存储源(比如,RDBMS)的组成部分。借助于RDBMS能够在内存中构建实体Bean,并且它能够存活很长时间。
会话Bean并不是持久化的,因此,会话Bean并不会保存到持久化存储源中,这同实体Bean不一样。请注意,会话Bean能够操作RDBMS,但是其本身并不是持久化对象。
| 回书目 上一节 下一节 |