文档章节

EJB---->Session Bean 的生命周期

小强斋太
 小强斋太
发布于 2016/11/09 20:07
字数 971
阅读 1
收藏 0
EJB 容器创建和管理session bean 实例,有些时候,你可能需要定制session bean 的管理过程。例如,你可能想在创
建session bean 实例的时候初始化字段变量,或在bean 实例被销毁的时候关掉外部资源。上述这些,你都可能通过
在bean 类中定义生命周期的回调方法来实现。这些方法将会被容器在生命周期的不同阶段调用(如:创建或销
毁时)。通过使有下面所列的注释,EJB 3.0 允许你将任何方法指定为回调方法。EJB 3.0 中,bean 可以有任意数量,任意名字的回调方法。
·@PostConstruct :当bean 对象完成实例化后,使用了这个注释的方法会被立即调用。这个注释同时适用于
有状态和无状态的会话bean。
·@PreDestroy :使用这个注释的方法会在容器从它的对象池中销毁一个无用的或者过期的bean 实例之前调
用。这个注释同时适用于有状态和无状态的会话bean。
·@PrePassivate :当一个有状态的session bean 实例空闲过长的时间,容器将会钝化(passivate)它,并把它的
状态保存在缓存当中。使用这个注释的方法会在容器钝化bean 实例之前调用。这个注释适用于有状态的会话bean。
当钝化后,又经过一段时间该bean 仍然没有被操作,容器将会把它从存储介质中删除。以后,任何针对该bean
方法的调用容器都会抛出例外。
·@PostActivate :当客户端再次使用已经被钝化的有状态session bean 时,新的实例被创建,状态被恢复。
使用此注释的session bean 会在bean 的激活完成时调用。这个注释只适用于有状态的会话bean。
·@Init :这个注释指定了有状态session bean 初始化的方法。它区别于@PostConstruct 注释在于:多个@Init
注释方法可以同时存在于有状态session bean 中,但每个bean 实例只会有一个@Init 注释的方法会被调用。这取
决于bean 是如何创建的(细节请看EJB 3.0 规范)。@PostConstruct 在@Init 之后被调用。
另一个有用的生命周期方法注释是@Remove,特别是对于有状态session bean。当应用通过存根对象调用使用了
@Remove 注释的方法时,容器就知道在该方法执行完毕后,要把bean 实例从对象池中移走。
package com.foshanshop.ejb3.impl;
import com.foshanshop.ejb3.LifeCycle;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Init;
import javax.ejb.PostActivate;
import javax.ejb.PrePassivate;
import javax.ejb.Remote;
import javax.ejb.Remove;
import javax.ejb.Stateful;
@Stateful
@Remote ({LifeCycle.class})
public class LifeCycleBean implements LifeCycle {
public String Say() {
try {
Thread.sleep(1000*10);
} catch (InterruptedException e) {

e.printStackTrace();
}
return "这是会话Bean生命周期应用例子";
}
@Init
public void initialize () {
System.out.println("initialize()方法被调用");
}
@PostConstruct
public void Construct () {
System.out.println("Construct()方法被调用");
}
@PreDestroy
public void exit () {
System.out.println("exit()方法被调用");
}
@PrePassivate
public void serialize () {
System.out.println("serialize()方法被调用");
}
@PostActivate
public void activate () {
System.out.println("activate()方法被调用");
}
@Remove
public void stopSession () {
System.out.println("stopSession()方法被调用");
//调用该方法以通知容器,移除该bean实例、终止会话。方法体可以是空的。
}
}
下面是LifeCycleBean 的Remote 接口
LifeCycle.java
package com.foshanshop.ejb3;
public interface LifeCycle {
public String Say();
public void stopSession ();
}

<%@ page contentType="text/html; charset=GBK"%>
<%@ page import="com.foshanshop.ejb3.LifeCycle, javax.naming.*, java.util.Properties"%>
<%
Properties props = new Properties();
props.setProperty("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
try {
LifeCycle lifecycle = (LifeCycle) session.getAttribute("lifecycle");
if (lifecycle == null) {
InitialContext ctx = new InitialContext(props);
lifecycle = (LifeCycle) ctx.lookup("LifeCycleBean/remote");
session.setAttribute ("lifecycle", lifecycle);
}
out.println(lifecycle.Say());
out.println("<BR>请注意观察Jboss控制台输出.等待10分钟,容器将会钝化此会话
Bean,@PrePassivate注释的方法将会执行<BR>");
out.println("<font color=red>你可以执行会话Bean的stopSession方法,把会话Bean实例从
对象池中移走。在销毁这个会话Bean之前将会执行@PreDestroy注释的方法<BR></font>");
/*
lifecycle.stopSession();
*/
} catch (Exception e) {
out.println(e.getMessage());
}
%>

 

本文转载自:http://www.cnblogs.com/xqzt/archive/2012/05/15/5637410.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
Servlet和JSP优化经验总结

1.在servlet的init()方法中缓存数据(init()方法只会调用一次,通过在init()方法中缓存一些静态的数据或完成一些只需要执行一次的、耗时的操作,就可大大地提高系统性能。例如,通过在init(...

hanzhankang
2014/02/09
0
0
使用NetWeaver开发EJB3.0

Prerequisites The Windows ® Open Perspective ® Other ® J2EE perspective is open. Procedure Creating the EJB Module Project You develop the EJB 3.0 classes in an EJB 3.0 proj......

晨曦之光
2012/03/09
0
0
用EJB3.0 简化EJB开发

引入 Enterprise JavaBeans ( EJB ) 是为了构建分布式组件。最初 , 该技术承诺可以解决 CORBA 的所有问题并降低其复杂性。作为J2EE的核心,EJB经历了几次较大的修订,并加入了许多特性,因...

晨曦之光
2012/03/09
0
0
spring 4 + jpa(hibernate 3/4) + spring mvc 多数据源配置

转载于:http://www.loveweir.com/ 先从persistence.xml开始: <?xml version=”1.0″ encoding=”UTF-8″?> <persistence version=”2.1″ xmlns=”http://java.sun.com/xml/ns/persistenc......

weir2008
2014/12/02
0
1
Java EE 6最终草案暗示了平台的未来发展方向

作者 Charles Humble 译者 张龙 发布于 2009年10月19日 下午1时4分 社区 Java 主题 Enterprise Application Blocks 标签 Java EE JSR-316(Java EE 6)专家组最近发布了规范的最终草案 。相对...

晨曦之光
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

移除或自定义 WordPress 仪表盘欢迎面板

第一次登录 WordPress 后台仪表盘页面,默认都会显示 WordPress 的欢迎面板: 如果我们要移除这个面板,在主题的 functions.php 中添加下面的代码即可: 12 //移除 WordPress 仪表盘欢迎面...

james_laughing
20分钟前
0
0
HashMap实现原理及源码分析

HashMap实现原理及源码分析   哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,...

DemonsI
23分钟前
0
0
eggjs学习笔记

快速初始化 生成项目(要求最低的node版本8.x) npm i egg-init -gegg-init egg-example --type=simplecd egg-examplenpm i 启动项目 npm run dev 配置 环境配置会覆盖默认配置 config...

别人说我名字很长
26分钟前
1
0
Winform Timer控件时间间隔

sender as System.Timers.Timer).Interval = 23 * 60 * 60 * 1000.0;//将时间间隔改为23小时,23小时后重新发生timer_Elapsed事件。 //60000:时间间隔1分钟,300000:时间间隔5分钟,600000:...

笑丶笑
27分钟前
0
0
在win10系统下怎样快速切换任务视图

切换窗口:Alt + Tab 任务视图:Win + Tab (松开键盘界面不会消失) 切换任务视图:Win + Ctrl +左/右 创建新的虚拟桌面:Win + Ctrl + D 关闭当前虚拟桌面:Win + Ctrl + F4...

SummerGao
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部