文档章节

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
用EJB3.0 简化EJB开发

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

晨曦之光
2012/03/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
JavaWeb基础知识点之Servlet

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w1lgy/article/details/79169527 一、servlet的概述 servlet是采用java编写的运行在服务器上的程序,用于接受...

我巴巴
01/26
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

没有更多内容

加载失败,请刷新页面

加载更多

请在移动端使用 先选择画笔

先选择画笔 请在移动端使用 https://lxz096.github.io/Canvas-/画板.html

壹峰
9分钟前
0
0
getSupportFragmentManager().beginTransaction().add报错cannot resolve method 'add'

getSupportFragmentManager().beginTransaction().add报错cannot resolve method 'add' 是导包的问题,所有包要保持一致,有app下的包,要保证都为app下的包 v4的包要保证都为v4的包...

lanyu96
23分钟前
0
0
linux 安装redis

Redis的安装 http://redis.io/download 官方安装例子 $ wget http://download.redis.io/releases/redis-4.0.11.tar.gz $ tar xzf redis-4.0.11.tar.gz $ cd redis-4.0.11 $ make //启动 $ sr......

苏牧影子
24分钟前
1
0
图(graph)

图(graph) 图是非线性数据结构,是一种较线性结构和树结构更为复杂的数据结构,在图结构中数据元素之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。 1、概念 1.定义 图(g...

星汉
29分钟前
1
0
好用的vue组件

http://elickzhao.github.io/2017/08/vue%E4%B8%80%E4%BA%9B%E7%89%B9%E5%88%AB%E6%9C%89%E7%94%A8%E7%9A%84%E6%8F%92%E4%BB%B6/...

Littlebox
45分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部