EJB容器在挂起和激活EJB实例期间到底做了些什么工作呢?当容器将EJB实例挂起时,它需要将实例的会话状态写入到二级存储源(Secondary Storage)中,比如文件或者RDBMS中。通过调用EJB实例的可选@PrePassivate回调方法,容器能够完成实例的挂起工作。在方法级使用@PrePassivate注释后,这一方法便成为了回调接口。注意,对于EJB实例而言,一旦EJB容器调用了它的@PrePassivate回调方法,则意味着该EJB实例持有的会话状态需要交换到其他地方。
这对于容器而言很重要。因为借助于@PrePassivate回调方法能够告知EJB实例:EJB容器需要挂起它,这使得释放其持有的资源成为可能。比如,EJB实例可能持有的资源有:RDBMS连接、已打开的Socket和文件、其他任何资源(这类资源可能不是存储到磁盘中,或者不是透明地借助于Java对象序列化来完成会话状态的保存)。EJB容器对@PrePassivate回调方法的调用,使得EJB实例有机会释放其持有的资源或者完成所需的其他操作。注意,一旦执行完@PrePassivate回调方法,则意味着Bean实例已准备好让EJB容器来挂起它,下面给出了代码片断。
|
图4-2展示了整个挂起过程。在实际场合中,有状态会话Bean的挂起过程同图4-2显示的过程并无区别。客户调用了Bean实例中的某个方法,而当时在内存中暂时找不到该Bean实例。与此同时,EJB容器持有的企业Bean实例的个数已经到达了设定的上限。因此,在处理客户请求前,容器需要挂起最近未使用的Bean实例。在挂起它后,容器才能够获得所需的Bean实例。
![]() |
| 图4-2 挂起有状态会话Bean |
激活过程刚好同上述过程相反。已完成序列化的会话状态将再次从二级存储源中读取到内存中,借助于Java对象序列化操作或者其他操作类型能够重新构建内存状态(会话状态)。然后,容器需要调用EJB实例可能提供的@PostActivate回调方法,此时,开发者有机会在@PostActivate回调方法中恢复在调用@PreDestroy回调方法期间释放的资源。实例代码如下。
|
图4-3给出了激活有状态会话Bean的示意图,它给出了典型的、just-in-time风格的激活过程介绍。图4-3中演示了客户调用Bean实例中的方法,而对应的有状态会话Bean实例已经被挂起。
![]() |
| 图4-3 激活有状态会话Bean |
上面给出的代码片断都是摘自定义在Bean类中的相应方法。开发者可以在本章“Count EJB组件的拦截器”一节内容看到单独的回调监听器类实例。
除非需要在EJB组件中打开资源(比如,Socket连接、数据库连接),否则不用提供注释了@PrePassivate和@PostActivate回调的方法。在挂起或激活Bean实例期间,这类资源需要重新构建或销毁。
生命周期回调方法应遵循如下规则。
◆对于直接定义在Bean类中的回调,其格式应该是public void <METHOD()>。
◆对于为Bean类单独提供(单个或多个)回调监听器类(拦截器)而言,其格式是public void <METHOD(InvocationContext ctx)>。javax.interceptor.InvocationContext提供了调用上下文信息。
◆不能够抛出应用异常,但可以抛出运行期异常。如果在事务中抛出了运行期异常,事务将回滚。
◆不能够为回调监听器类实施依赖注入。
| 回书目 上一节 下一节 |
|
· 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宣布浪潮蝉联存储市.. |