频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

4.3.1 实现实例池功能

作者: 斯瑞格奈斯/罗时飞编译 出处:电子工业出版社  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2007-04-25 17:14
关 键 词:实例池  功能  EJB  精通EJB 3.0
阅读提示:会话Bean能够完成客户所要求的业务操作,它是含有业务逻辑的可重用组件,并能够用于业务过程。比如,会话Bean能够完成查价、订单登记、视频压缩、银行事务、股票交易、数据库操作、复杂计算等。开始深入研究会话Bean的各个特性吧!其后,本章将开发一个有状态会话Bean组件实例。

对于有状态会话Bean而言,要实现它的实例池可不是件简单的工作。当客户调用企业Bean的方法时,客户将启动与企业Bean的会话,而且会话状态必须保存下来,供同一客户的下次方法请求到来时使用。由于各个企业Bean实例存储的状态信息仅是单个客户的,因此容器不能够简单地将EJB组件实例放置在池中,也不能够简单地从池中获得EJB实例服务于客户的方法请求操作。但是,对于有状态会话Bean而言,EJB容器还是需要实现实例池功能,从而能够有效利用系统资源,并且能够加强EJB系统的伸缩性。毕竟,系统资源有限,比如内存、数据库连接、Socket连接等。如果有状态会话Bean持有大量的会话信息,EJB服务器将很快耗尽系统资源。对于无状态会话Bean而言,这并不是问题,因为EJB容器只需要在实例池中维护若干个EJB实例,便能够服务大量的并发客户。

对于操作系统而言,也存在类似的问题。无论何时,运行于计算机上的应用只能够享有固定的物理内存。当然,操作系统还是允许同时运行多个应用,即使这些应用所消耗的内存数量大于物理内存,操作系统还是能够胜任的。为了实现上述情况,操作系统需要将硬盘作为物理内存扩展使用,因此,这有效地增加了系统的虚拟内存。一旦应用处于闲置状态,其占用的内存将从物理内存交换到硬盘上。当该应用再次激活时,运行该应用的所需数据将从硬盘获得,并写入到内存中。在切换不同的应用(称之为上下文切换)时,经常会出现上述情形。

EJB容器也为有状态会话Bean作了类似的处理。为了限制内存中运行的有状态会话Bean实例的数量,EJB容器需要将有状态会话Bean的会话状态保存到硬盘或者其他存储源中,该过程称之为挂起(Passivation)。在挂起有状态会话Bean后,会话状态被安全地保存下来,而且其释放的内存可以供其他应用(或EJB实例)使用。一旦被挂起的有状态会话Bean实例的客户再次调用它,被挂起的会话状态将重新回到有状态会话Bean实例中,该过程称之为激活(Activation)。现在,新的有状态会话Bean实例恢复了同原先客户的会话。请注意,激活的有状态会话Bean实例不一定是原先使用的有状态会话Bean实例(即服务于原先客户的那个有状态会话Bean实例)。但是,这并不影响原先客户同有状态会话Bean进行的会话过程,因为新的有状态会话Bean实例获得的会话状态正是被挂起的有状态会话Bean实例的会话状态。

因此,EJB实际上也具有有状态会话Bean实例池功能。在处理多个并发客户时,只需要在内存中存活若干个有状态会话Bean实例。但是,EJB容器需要为此付出代价,即挂起和激活过程将导致I/O性能瓶颈。同无状态会话Bean相比,维护无状态会话Bean实例池是十分简单的,因为没有会话状态需要维护。

开发者可能会问,EJB容器会将哪个有状态会话Bean实例激活,又会挂起哪个有状态会话Bean实例呢?答案:这取决于具体的EJB容器。大部分容器使用最近最少使用(Least Recently Used,LRU)挂起策略,即简单地挂起最近没有使用到的有状态会话Bean实例。由于远程客户经常会中断与网络的连接,使得服务它的有状态会话Bean实例处于游离态,因此需要挂起它。最近最少使用算法处理这种情况很适合,它是不错的算法。因此,如果有状态会话Bean实例最近没有使用到,则EJB容器会挂起它,从而将会话状态保存在硬盘上。

只要有状态会话Bean实例没有参与到客户请求中,容器就有可能随时挂起它。因此,EJB容器有绝对的权利来执行有状态会话Bean实例的挂起操作。当然,有一种场景除外,即凡是参与到事务中的有状态会话Bean实例,EJB容器必须在事务完成后才能够挂起那些Bean实例(详情见第10章)。

为激活有状态会话Bean实例,大部分EJB容器通常都会使用just-in-time算法,即只有在客户请求到来时,才会激活有状态会话Bean实例。如果客户请求传入到EJB容器中,而且容器已经挂起了该客户的会话状态,则容器会马上激活它,从而将挂起的状态信息写入到内存中。

通常,挂起和激活操作对于无状态会话Bean而言毫无意义。由于无状态会话Bean实例不存在状态信息需要挂起或者激活,因此EJB容器便能够随心所欲地销毁它。

【责任编辑:火凤凰 TEL:(010)68476606-8007】


回书目   上一节   下一节
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有