关于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的生命周期主要分为以下几个阶段: 1. **初始化阶段...
SessionBean的生命周期包括实例化、激活、被动使用、去激活和销毁五个阶段。这些阶段由EJB容器自动管理,开发者只需关注业务逻辑实现。 - **实例化**:当客户端首次请求SessionBean时,EJB容器会创建一个新的实例。...
3. 容器管理:EJB容器提供了事务管理、安全性、生命周期管理和资源管理等服务,开发者无需关心这些底层细节。 4. 可部署和可扩展性:Session Bean可以在不同的服务器上部署,易于扩展和调整以适应不断变化的需求。 ...
Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...
在Java EE应用中,Session Bean的生命周期包括以下几个阶段: 1. 创建:当客户端通过JNDI查找并请求Session Bean实例时,服务器会创建一个新的实例。 2. 初始化:服务器调用Session Bean的初始化方法(@...
- **Singleton Session Bean**:整个应用生命周期中只有一个实例,常用于全局配置或计数器。 **4. 注解驱动的开发** EJB 3.0引入了多种注解,如`@Stateless`, `@Stateful`, `@Singleton`, `@LocalBean`, `@Remote`...
接下来,我们将深入探讨Spring Bean生命周期的各个阶段,并通过具体的示例来演示。 1. **配置阶段** 在Spring容器初始化时,它会读取配置文件(如XML或Java配置),解析Bean定义,包括其依赖关系、初始化方法、...
Bean生命周期的理解对于优化应用性能和理解Spring内部工作原理至关重要。这里我们将深入探讨Spring的Bean生命周期、容器周期以及工厂周期。 首先,让我们从Bean生命周期开始。在Spring中,Bean的生命周期包括以下几...
EJB系统由容器管理,容器负责诸如安全性、事务、生命周期管理等底层服务。 **JNDI:Java Naming and Directory Interface** JNDI是Java平台中的一个接口,用于查找和绑定分布式环境中的对象。在EJB上下文中,JNDI...
无论是Session Bean还是Entity Bean,都有特定的生命周期阶段,包括创建、激活、被动使用、钝化和销毁。容器管理这些阶段,确保Bean在正确的时间进行初始化和清理,同时提供事务和安全性的支持。 **EJB与Java EE的...
EJB 提供了一系列的服务,如生命周期管理、代码生成、持久性管理、安全性、事务处理、锁和并发管理,使得开发者可以专注于业务逻辑,而无需过多关注底层系统的复杂性。 1. **EJB类型**: - **Session Bean**:代表...
在"ejb sessionbean demo"中,我们主要探讨的是如何使用EJB的Session Bean进行开发和演示。Session Bean通常用于实现业务逻辑,它们可以是无状态的,意味着每个请求都会创建一个新的Bean实例,不保留任何先前会话的...
1. Session Bean的生命周期:从实例化、激活、被动使用到最终的销毁,理解每个阶段的方法调用和状态转换。 2. 无状态Session Bean(Stateless Session Bean):这种类型的Bean不保存任何客户端特定的状态,适合执行...
标题"Stateful--sessionbean.zip_sessionBean_stateful"表明这个压缩包包含有关有状态会话Bean的实现资料,可能包括设计思路、步骤截图和源代码。这些资源对于理解如何创建和使用SFSB至关重要。 描述中的"有状态的...
Session Bean 的生命周期包括创建、激活、被动化和销毁四个阶段。容器负责管理这些阶段,确保在正确的时间进行资源分配和释放。开发者可以通过实现特定的生命周期方法来控制这些过程,如`@PostConstruct`和`@...
**EJB容器**是Java EE服务器的一部分,负责管理SessionBean的生命周期,处理并发、事务、安全性、资源管理等问题,让开发者可以专注于编写业务逻辑。 **源码分析**对于理解EJB2 SessionBean的工作原理至关重要。...
首先,@PostConstruct和@PreDestroy是Java EE规范定义的两个注解,它们分别用于标记在Session Bean生命周期中的特定时刻执行的方法。@PostConstruct注解的方法会在Session Bean的构造函数执行后,由EJB容器调用来...
【ejb入门录像 sessionBean】是针对企业级Java应用(Enterprise JavaBeans,简称EJB)技术的初学者设计的一段教学视频。EJB是Java EE(Java Platform, Enterprise Edition)框架的重要组成部分,它提供了一种标准的...
Spring中的Bean生命周期主要分为两个阶段:容器管理阶段和用户自定义阶段。在容器管理阶段,Spring容器负责Bean的实例化、属性注入、初始化、使用和销毁。而在用户自定义阶段,开发者可以通过定义回调方法或使用特定...