`

zzEJB sessionBean的生命周期

    博客分类:
  • Java
 
阅读更多

【译】 Stateless Session Bean的生命周期

首先要强调的是session bean的生命周期是由容器控制的而不是应用程序控制的。

stateless session bean的初始状态是不存在(does-not-exist)状态。就是在容器还没有启动的时候。接下来的状态是进入准备池(method-ready- pool)状态。当容器启动后,它会在准备池(method-ready pool)中建立许多stateless session bean的实例。为了在池中建立一个实例,容器会进行一下的步骤:

1. bean被实例化(instantiated)
2. 容器注入到bean的SessionContext。Bean使用SessionContext来对容器查询,查询内容可以是bean的状态 (status)或者是上下文(context)
3. 当bean定义了元数据(metadata)的时候,容器会进行对应的依赖注入(dependency injection)
4. 容器接下来,如果bean里有定义的话,容器将会调用PostConstruct的回调方法。PostConstruct方法是用来初始化bean中使用 到的任何资源(resources),例如,这个session bean可能使用了JMS queue来发送消息。JMS使用的connection queue将会在PostConstruct方法中被初始化。在一个state less session bean的生命周期中,仅仅在从does-not-exist状态到method-only pool状态转换的过程中,PostConstruct方法会被调用一次。

接下来容器会调用bean中的business方法。对于方法的 调用可以来自于不同的客户端(client)。相反的,当一个客户端调用一个stateless session bean的方法时,method-ready pool里的任何一个实例都可以被容器选择来实现这个方法。

方法被调用后,容器可能会选择销毁这个bean实例或者当其他的客户端调用这个bean中某个方法的时候重用这个bean实例。

当 容器决定要销毁这个实例的时候,它首先会调用PreDestroy回调方法(如果你定义了PreDestroy方法的话)。PreDestroy方法被用 来整理动作,比如如果你在PostConstruct方法中建立了某个连接的话,会在这里被关闭。在state less session bean的生命周期中,PreDestroy方法仅仅会在当向does-not-exist状态转换时被调用一次。

这种实例池和实例共享的方式意味着,对于stateless session bean来说,当有大量客户端访问的时候,它是具备良好的伸缩性的。

下图是从网络上找到的一副流程图,仅供参考

 

 

=============================================

 

【译】 stateful session bean的生命周期

stateful session bean的生命周期与stateless session bean有很多不同的方面。对于同一个bean的实例,没有池的概念,因为每一个实例仅仅为一个客户端服务。当客户端执行了一个借口的查找 (lookup)或者对一个bean进行依赖注入的时候,stateful session bean就会从does-not-exist状态转换为method-ready状态。所以,这一步是有客户端初始化的,而不是容器来初始化的。一旦 stateful session bean处在method-ready状态的话,容器就会同处理一个在method-ready状态的stateless session进行同样的操作:

1. bean被实例化(instantiated)
2. 容器注入到bean的SessionContext。Bean使用SessionContext来对容器查询,查询内容可以是bean的状态 (status)或者是上下文(context)
3. 当bean定义了元数据(metadata)的时候,容器会进行对应的依赖注入(dependency injection)
4. 容器接下来,如果bean里有定义的话,容器将会调用PostConstruct的回调方法。

接下来容器就会调用bean的一个方法了。

当客户端在不同方法调用的过程中,决定先等待一段时间或者进行其他的一些操作的时候,session就会处于停滞状态。容器的缓存可能会被停滞状态 的stateful session bean所占满。为了避免这种情况,容器会将它们从缓存中转移到磁盘或者其他的存储介质中。这个过程叫做钝化(passivation)并且会将bean 实力进行序列化。当客户端想要调用一个钝化的bean中的一个方法的时候,容器就会反序列化之前保存的bean然后调用对应的方法。这个过程被称为激活 (activation)。需要注意的是,所调用的方法可能并不在原始的那个bean实例中了,但是这样做是安全的,当激活的时候,我们重新恢复了在钝化 的时候存储的状态(state)。

钝化(passivation)算法是依赖与容器的,并且主要是依赖于像在容器的缓存中最多能够容纳的bean的数量,bean的最大的停滞时间, 或者是容器选择消灭哪一个bean的规则。

bean可以提供一个@PrePassivate回调方法,以供在钝化(passivation)前被迅速执行,和一个@PostActivate 回调方法,以供在激活后被迅速执行。一个session bean的状态可能会包含开放的资源,比如开放的sockets,数据库或者JMS链接,这些资源在钝化的时候容器是不能掌控的。那么在这种情况下,这些 资源就会在@PrePassivate方法中被关闭,并且在@PostActive方法中被重新打开。

当@Remove定义的方法被调用时,bean的状态就会从method-ready转换为does-not-exist状态。在配置的超时时间到 达的时候,bean也会进行这样的操作。在以上任何一种情况下,@PreDestory方法会首先被调用。

一个钝化后的bean同样会在超时后转移到does-not-exist状态。需要注意的是,这种情况下,任何的@PreDestory方法都不会 被执行。

分享到:
评论

相关推荐

    spring bean的生命周期

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

    学习SessionBean

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

    Session Bean的使用

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

    EJB3.0开发Session Bean.rar

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

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

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

    Spring bean生命周期demo

    在Spring框架中,Bean的生命周期是指从创建到销毁的整个过程。这个过程包含了初始化、正常使用以及最终的销毁几个阶段。了解并掌握Spring Bean的生命周期对于优化应用性能和资源管理至关重要。接下来,我们将深入...

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

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

    Spring的bean生命周期

    Spring框架是Java应用程序开发中的核心组件,其管理Bean的生命周期是其重要特性之一。Bean生命周期的理解对于优化应用性能和理解Spring内部工作原理至关重要。这里我们将深入探讨Spring的Bean生命周期、容器周期以及...

    session bean

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

    SESSIONBEAN 和客户端相结合 的例子

    在Java企业级应用开发中,SessionBean是Java服务器端组件(Java EE)的一部分,它扮演着客户端和数据库之间的重要中介角色。本教程将通过具体的例子深入解析SessionBean与客户端的结合,以及如何与Oracle数据库进行...

    EJB3图文教程之开发Session Bean

    ### EJB3图文教程之开发Session Bean:详细解析与实践指南 #### 一、环境搭建:JBuilder2007与JBoss4.0的完美结合 在开始EJB3.0的Session Bean开发之前,首先需搭建一个适宜的开发环境。本教程将指导你如何在...

    ejb实例包括session bean和实体bean

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

    EJB详解 sessionbean entitybean MDB

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

    itfuture_sessionbean

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

    ejb sessionbean demo

    - **容器管理**:EJB容器负责Bean的生命周期管理,包括实例化、事务管理、安全性等。 - **异常处理**:EJB提供了标准的异常处理机制,允许开发者定义和处理业务异常。 - **测试代码**:通常会有单元测试或集成测试来...

    EJB3.0无状态SessionBean例子

    **EJB3.0无状态SessionBean例子** Enterprise JavaBeans(EJB)是Java平台上的一个核心组件,用于构建企业级分布式应用。EJB3.0是EJB规范的一个重大改进,它引入了诸多简化开发的新特性,使得EJB更加轻量级且易于...

    Spring Bean生命周期.pdf

    其中,Spring Bean生命周期的管理是Spring框架的核心功能之一,它涉及Spring容器如何创建、配置以及销毁Bean的整个过程。理解Spring Bean的生命周期对于开发高效和可维护的Java应用至关重要。 Spring Bean生命周期...

    Stateful--sessionbean.zip_sessionBean_stateful

    描述中的"有状态的简单的会话Bean的实现,里面有详细的设计过程截图以及源代码",意味着我们可以期待看到一个实际操作示例,通过设计过程的截图来直观地了解SFSB的生命周期管理,以及如何编写和部署源代码。...

    谈谈我对Spring Bean 生命周期的理解

    本文将详细介绍 Spring Bean 生命周期的概念、生命周期图、生命周期阶段、生命周期管理方式等相关知识点。 一、 Spring Bean 生命周期概述 Spring Bean 生命周期是指 Spring 容器中 Bean 的创建、初始化、销毁等...

    EJB_sessionbean.rar_session

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

Global site tag (gtag.js) - Google Analytics