`
eighthspace
  • 浏览: 26066 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SessionBean的生命周期

阅读更多

关于SessionBean的生命周期。

 

有状态的SessionBean的生命周期:

 

几个比较重要的注解:

 

@PostConstruct:当EJB实例被创建后会被自动调用。

 

@Remove:当EJB实例需要回收时调用,该注解用在EJB接口中任意方法上。

 

@PreDestory:当@Remove方法被调用时,该方法会被自动调用。

 

@PrePassivate:当EJB实例进入钝化状态前,会被调用。

 

@PostActivate:当EJB实例被激活后,会被调用。

 

以下的实例验证了上面这几个注解执行的时机。

 

服务器端程序:

 

 

@Stateful
@Remote
@CacheConfig(maxSize=2)//该注解定义了在EJB的实例池中最多只允许有2个实例。
public class StatefulEjbBean implements StatefulEjb {

	private int num;
	public void add(int i) {
		// TODO Auto-generated method stub
		num = num + i;
	}

	public int getResult() {
		// TODO Auto-generated method stub
		return num;
	}
	
	@PostConstruct
	public void postConstruct(){
		System.out.println(this+" , postConstruct");
	}
	
	@PrePassivate
	public void prePassivate(){
		System.out.println(this+" , prePassivate");
	}
	
	@PostActivate
	public void postActivate(){
		System.out.println(this+" , postActivate");
	}
	
	@Remove
	public void logout(){
		System.out.println(this + " , remove");
	}
	
	@PreDestroy
	public void preDestroy(){
		System.out.println(this+" , PreDestroy");
	}

}

 

 

客户端程序:

 

 

public class StatefulEbjClient {
	public static void main(String[] args) {
		try {
			InitialContext context = new InitialContext();
			//创建第一个EJB实例
			//调试信息输出:org.leadfar.ejb.StatefulEjbBean@1b4c9f3 , postConstruct
			StatefulEjb fe = (StatefulEjb)context.lookup("StatefulEjbBean/remote");
			fe.add(1);
			
			//创建第二个EJB实例
			//调试信息输出:org.leadfar.ejb.StatefulEjbBean@10f7a0 , postConstruct
			StatefulEjb fe2 = (StatefulEjb)context.lookup("StatefulEjbBean/remote");
			fe2.add(1);
			fe2.add(1);
			
			//创建第三个EJB实例,但是由于此时的EJB实例池中最多只能有两个实例,所以必须有一个实例被钝化。
			//调试信息输出:
			//org.leadfar.ejb.StatefulEjbBean@8f362e , postConstruct
			//org.leadfar.ejb.StatefulEjbBean@1b4c9f3 , prePassivate 第一个实例被钝化,也就是服务器不再记录其状态。
			StatefulEjb fe3 = (StatefulEjb)context.lookup("StatefulEjbBean/remote");
			fe3.add(1);
			fe3.add(1);
			fe3.add(1);
			
			//调用第一个实例的getResult()方法,需要重新将第一个实例加入到实例池中,因此会调用激活方法。
			//同时,会有另外一个实例被钝化。
			//调试信息输出:
			//org.leadfar.ejb.StatefulEjbBean@da7dd , postActivate 需要注意:可以看出此时激活的实例已经不是之前的第一个了,因为服务器重新创建了一个新的实例,只不过该实例拥有之前第一个实例的状态信息。
   			//org.leadfar.ejb.StatefulEjbBean@10f7a0 , prePassivate 第二个实例被钝化。
			System.out.println(fe.getResult());

   			//当@Remove的方法被调用时,@PreDestroy方法会被自动调用。
			//调试信息:
			//org.leadfar.ejb.StatefulEjbBean@da7dd , remove
			//org.leadfar.ejb.StatefulEjbBean@da7dd , PreDestroy
			fe.logout();
			//由于fe2实例已经被钝化,此时需要完成的操作是先将该实例激活,然后再执行上面一样的操作。
			//调试信息:
			//org.leadfar.ejb.StatefulEjbBean@16bb9f7 , postActivate
			//org.leadfar.ejb.StatefulEjbBean@16bb9f7 , remove
			//org.leadfar.ejb.StatefulEjbBean@16bb9f7 , PreDestroy
			fe2.logout();
			fe3.logout();
		} catch (NamingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

这段程序就可以充分说明一个有状态的SessionBean实例的各种状态。

分享到:
评论

相关推荐

    spring bean的生命周期

    Spring Bean的生命周期是Spring框架中的核心概念,它涵盖了Bean从创建到销毁的全过程。了解这一过程对于优化应用程序的性能和管理资源至关重要。在Spring中,Bean的生命周期主要分为以下几个阶段: 1. **初始化阶段...

    学习SessionBean

    SessionBean的生命周期包括实例化、激活、被动使用、去激活和销毁五个阶段。这些阶段由EJB容器自动管理,开发者只需关注业务逻辑实现。 - **实例化**:当客户端首次请求SessionBean时,EJB容器会创建一个新的实例。...

    Session Bean的使用

    3. 容器管理:EJB容器提供了事务管理、安全性、生命周期管理和资源管理等服务,开发者无需关心这些底层细节。 4. 可部署和可扩展性:Session Bean可以在不同的服务器上部署,易于扩展和调整以适应不断变化的需求。 ...

    详解Spring中Bean的生命周期和作用域及实现方式

    Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...

    session bean

    在Java EE应用中,Session Bean的生命周期包括以下几个阶段: 1. 创建:当客户端通过JNDI查找并请求Session Bean实例时,服务器会创建一个新的实例。 2. 初始化:服务器调用Session Bean的初始化方法(@...

    EJB3.0开发Session Bean.rar

    - **Singleton Session Bean**:整个应用生命周期中只有一个实例,常用于全局配置或计数器。 **4. 注解驱动的开发** EJB 3.0引入了多种注解,如`@Stateless`, `@Stateful`, `@Singleton`, `@LocalBean`, `@Remote`...

    Spring bean生命周期demo

    接下来,我们将深入探讨Spring Bean生命周期的各个阶段,并通过具体的示例来演示。 1. **配置阶段** 在Spring容器初始化时,它会读取配置文件(如XML或Java配置),解析Bean定义,包括其依赖关系、初始化方法、...

    Spring的bean生命周期

    Bean生命周期的理解对于优化应用性能和理解Spring内部工作原理至关重要。这里我们将深入探讨Spring的Bean生命周期、容器周期以及工厂周期。 首先,让我们从Bean生命周期开始。在Spring中,Bean的生命周期包括以下几...

    EJB的开发及应用,Session Bean的开发

    EJB系统由容器管理,容器负责诸如安全性、事务、生命周期管理等底层服务。 **JNDI:Java Naming and Directory Interface** JNDI是Java平台中的一个接口,用于查找和绑定分布式环境中的对象。在EJB上下文中,JNDI...

    ejb实例包括session bean和实体bean

    无论是Session Bean还是Entity Bean,都有特定的生命周期阶段,包括创建、激活、被动使用、钝化和销毁。容器管理这些阶段,确保Bean在正确的时间进行初始化和清理,同时提供事务和安全性的支持。 **EJB与Java EE的...

    EJB详解 sessionbean entitybean MDB

    EJB 提供了一系列的服务,如生命周期管理、代码生成、持久性管理、安全性、事务处理、锁和并发管理,使得开发者可以专注于业务逻辑,而无需过多关注底层系统的复杂性。 1. **EJB类型**: - **Session Bean**:代表...

    ejb sessionbean demo

    在"ejb sessionbean demo"中,我们主要探讨的是如何使用EJB的Session Bean进行开发和演示。Session Bean通常用于实现业务逻辑,它们可以是无状态的,意味着每个请求都会创建一个新的Bean实例,不保留任何先前会话的...

    itfuture_sessionbean

    1. Session Bean的生命周期:从实例化、激活、被动使用到最终的销毁,理解每个阶段的方法调用和状态转换。 2. 无状态Session Bean(Stateless Session Bean):这种类型的Bean不保存任何客户端特定的状态,适合执行...

    Stateful--sessionbean.zip_sessionBean_stateful

    标题"Stateful--sessionbean.zip_sessionBean_stateful"表明这个压缩包包含有关有状态会话Bean的实现资料,可能包括设计思路、步骤截图和源代码。这些资源对于理解如何创建和使用SFSB至关重要。 描述中的"有状态的...

    EJB_sessionbean.rar_session

    Session Bean 的生命周期包括创建、激活、被动化和销毁四个阶段。容器负责管理这些阶段,确保在正确的时间进行资源分配和释放。开发者可以通过实现特定的生命周期方法来控制这些过程,如`@PostConstruct`和`@...

    EJB2 SessionBean

    **EJB容器**是Java EE服务器的一部分,负责管理SessionBean的生命周期,处理并发、事务、安全性、资源管理等问题,让开发者可以专注于编写业务逻辑。 **源码分析**对于理解EJB2 SessionBean的工作原理至关重要。...

    计算机二级java资料.pdf

    首先,@PostConstruct和@PreDestroy是Java EE规范定义的两个注解,它们分别用于标记在Session Bean生命周期中的特定时刻执行的方法。@PostConstruct注解的方法会在Session Bean的构造函数执行后,由EJB容器调用来...

    ejb入门录像 sessionBean

    【ejb入门录像 sessionBean】是针对企业级Java应用(Enterprise JavaBeans,简称EJB)技术的初学者设计的一段教学视频。EJB是Java EE(Java Platform, Enterprise Edition)框架的重要组成部分,它提供了一种标准的...

    Spring框架中Bean的生命周期 Spring中Bean有几种作用域

    Spring中的Bean生命周期主要分为两个阶段:容器管理阶段和用户自定义阶段。在容器管理阶段,Spring容器负责Bean的实例化、属性注入、初始化、使用和销毁。而在用户自定义阶段,开发者可以通过定义回调方法或使用特定...

Global site tag (gtag.js) - Google Analytics