对于有状态会话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】
| 回书目 上一节 下一节 |
|
· SQL Server入门到精通.. · 交换技术配置手册技术.. · 超级网管员——网络应.. · 网络服务器配置与应用.. · Linux集群技术自测试题.. · JavaSript核心技术自测.. |
· ARP攻击与防范技术自测.. · 国庆挑战自己参加自测 .. · 《网管员必读—网络应.. · 历次技术自测 获奖网友.. · 51CTO国庆七天技术自测.. · 9.2.2 无线AP |
|
|||
| · 网管系统介绍 · 网络管理系统如何支撑I.. · CISSP认证成长之路 · 51CTO国庆充电专题之好.. · 网络技术经典基础教程 · 51CTO主编推荐经典专题 · RAID——磁盘阵列基础 · 充电计划之热门IT认证.. |
· 51CTO技术自测 挑战自.. · AMD Phenom三核处理器.. · 国际文档格式标准开战 · 2007年互联网大会 · 我是黑客我怕谁——讲.. · ARP攻击防范与解决方案 · Solaris 10 配置管理 · Solaris基础知识入门 |
||
|
|||
| · Java基础教程 · VPN技术 · ARP攻击防范与解决方案 · SQL Server 2005全解 · SOA 面向服务架构 · SQL Server 2005全解 · Java编程开发手册 · RAID——磁盘阵列基础 |
· 三层交换技术专题 · SQL Server入门到精通 · Windows Server 2003企.. · Windows远程桌面应用 · C#技术开发指南 · VPN技术 · C#技术开发指南 · Solaris 10 配置管理 |
||
|
|||
| · ARP攻击防范与解决方案 · VPN技术 · SQL Server 2005全解 · Java基础教程 · SQL Server入门到精通 · SQL Server 2005全解 · SOA 面向服务架构 · Java编程开发手册 |
· C#技术开发指南 · 三层交换技术专题 · C#技术开发指南 · Windows远程桌面应用 · RAID——磁盘阵列基础 · Windows Server 2003企.. · 邮件服务器专题 · wimax技术与趋势 |
||
| ·DB2 Viper快速入门 ·DB2 9数据库的镜像分割与.. |
·将XML应用程序从DB2 8.x.. ·DB2 9中的pureXML:如何.. |
| ·服务器中的“傻瓜机”在.. ·盖茨也喜欢登录Youtube看.. |
· · |
| ·体验Windows Server 2008.. ·将超星图书转成PDF文档 |
·使用 Office Communicati.. ·VMware Workstation 6.01.. |
| ·强烈质疑“步行1公里就能.. ·国庆期间新闻回顾:微软.. |
·9月第3周回顾:微软和英.. ·9月第2周回顾:四核之战.. |
| · 华为、贝恩资本22亿美元.. · NGN:下一代网络 · 网络访问中断大排查 |
· 教你使用Anti ARP Sniff.. · 网络嗅探教程:使用Snif.. · 常见病毒手工清除方法大.. |
| · C++是垃圾语言?! · 2007年IT界七大抄袭事件 · Java实用开发全集 |
· 解析Ajax开发框架 走进A.. · 基于Google Maps与Ajax.. · 基于Google Maps与Ajax.. |
| · 热门 IT 培训认证官方资.. · Ubuntu 中文开源频道 · Solaris基础知识入门 |
· Google推出唯一硬件——.. · 硬盘之父获得诺贝尔物理.. · 理性面对四核服务器选购 |
| · 甲骨文Oracle 11g正式发.. · Oracle数据库开发之PL/S.. · Oracle数据库开发基础教.. |
· 硬盘之父获得诺贝尔物理.. · 存储2006,一个并购的大.. · IDC宣布浪潮蝉联存储市.. |