- 浏览: 167365 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ooo456mmm:
正解~~~
无需安装oracle,配置plsql developer -
tjuking:
帮我解决了一大问题,thx~
vim批量修改文件 解决 非法字符: \65279 问题 -
dou85dou:
where is lz's content?
如何打造Linux下的IDE
【译】 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方法都不会 被执行。
发表评论
-
c++与java内存模型& c++ vTable
2012-11-03 16:25 1002参见: http://stackoverflow.com/q ... -
maven pom 指南
2012-11-03 15:56 774http://maven.apache.org/pom.htm ... -
could not discover transaction status
2012-11-01 18:08 1019https://community.jboss.org/thr ... -
zz java 类初始化顺序
2012-08-17 14:42 718zz from http://ig2net.info/arch ... -
JSP JSF tag关系
2012-07-12 23:44 939zz from http://drewdev.blogspot ... -
class泛型反射相关API介绍
2012-06-21 10:49 867class泛型反射相关API介绍: 1. getGeneri ... -
服务提供者框架(Service provider framework)
2012-06-14 16:55 1121服务提供者框架(Service provider framew ... -
JMS的使用
2012-05-30 16:24 9561. 何时使用MQ 如果仅仅是为了达到异步调用的目的, ... -
java EE 6 中Jsf 2.0 managedBean和CDI关系
2012-05-29 15:55 2762转自 :http://stackoverflow.com/qu ... -
maven 默认编码
2012-05-28 15:59 5428maven会使用平台的默认编码,中文系统就是GBK 如果使用 ... -
Seam的事务管理
2012-05-17 17:10 1153Seam的事务管理 Seam和jsf绑定在一起,seam将j ... -
seam与jsf的结合
2012-04-10 23:02 875Seam与JSF的结合 1. 采用org.jboss.seam ... -
maven依赖之optional
2012-04-09 15:42 893http://maven.apache.org/guides/ ... -
Visualsvn+trac 0.12 配置
2012-03-13 09:54 937主要参考了: http://www.cnblogs.com/ ... -
seam 的interceptor分析
2012-03-12 10:36 10221. componet.initialInstance()的时 ... -
关于jboss 4 的JNDIVIew 名字空间
2012-02-27 18:11 1036Jboss JNDI http://do ... -
多个EJB entity jar 使用同一个 persistence.xml
2012-02-22 18:32 744可以利用 persistence.xml 的 class、ma ... -
java的ClassLoader机制
2012-02-22 16:27 863zz from :http://www.cnblogs.com ... -
关于JPA的FlushModel---Manual
2012-02-21 17:08 1710zz from : http://www.codeinstr ... -
hibernate 分页
2011-11-01 09:10 671setFirstResult 是起始数据,setMaxResu ...
相关推荐
Spring Bean的生命周期是Spring框架中的核心概念,它涵盖了Bean从创建到销毁的全过程。了解这一过程对于优化应用程序的性能和管理资源至关重要。在Spring中,Bean的生命周期主要分为以下几个阶段: 1. **初始化阶段...
SessionBean的生命周期包括实例化、激活、被动使用、去激活和销毁五个阶段。这些阶段由EJB容器自动管理,开发者只需关注业务逻辑实现。 - **实例化**:当客户端首次请求SessionBean时,EJB容器会创建一个新的实例。...
3. 容器管理:EJB容器提供了事务管理、安全性、生命周期管理和资源管理等服务,开发者无需关心这些底层细节。 4. 可部署和可扩展性:Session Bean可以在不同的服务器上部署,易于扩展和调整以适应不断变化的需求。 ...
- **Singleton Session Bean**:整个应用生命周期中只有一个实例,常用于全局配置或计数器。 **4. 注解驱动的开发** EJB 3.0引入了多种注解,如`@Stateless`, `@Stateful`, `@Singleton`, `@LocalBean`, `@Remote`...
Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...
在Spring框架中,Bean的生命周期是指从创建到销毁的整个过程。这个过程包含了初始化、正常使用以及最终的销毁几个阶段。了解并掌握Spring Bean的生命周期对于优化应用性能和资源管理至关重要。接下来,我们将深入...
EJB系统由容器管理,容器负责诸如安全性、事务、生命周期管理等底层服务。 **JNDI:Java Naming and Directory Interface** JNDI是Java平台中的一个接口,用于查找和绑定分布式环境中的对象。在EJB上下文中,JNDI...
Spring框架是Java应用程序开发中的核心组件,其管理Bean的生命周期是其重要特性之一。Bean生命周期的理解对于优化应用性能和理解Spring内部工作原理至关重要。这里我们将深入探讨Spring的Bean生命周期、容器周期以及...
在Java EE应用中,Session Bean的生命周期包括以下几个阶段: 1. 创建:当客户端通过JNDI查找并请求Session Bean实例时,服务器会创建一个新的实例。 2. 初始化:服务器调用Session Bean的初始化方法(@...
在Java企业级应用开发中,SessionBean是Java服务器端组件(Java EE)的一部分,它扮演着客户端和数据库之间的重要中介角色。本教程将通过具体的例子深入解析SessionBean与客户端的结合,以及如何与Oracle数据库进行...
### EJB3图文教程之开发Session Bean:详细解析与实践指南 #### 一、环境搭建:JBuilder2007与JBoss4.0的完美结合 在开始EJB3.0的Session Bean开发之前,首先需搭建一个适宜的开发环境。本教程将指导你如何在...
无论是Session Bean还是Entity Bean,都有特定的生命周期阶段,包括创建、激活、被动使用、钝化和销毁。容器管理这些阶段,确保Bean在正确的时间进行初始化和清理,同时提供事务和安全性的支持。 **EJB与Java EE的...
EJB 提供了一系列的服务,如生命周期管理、代码生成、持久性管理、安全性、事务处理、锁和并发管理,使得开发者可以专注于业务逻辑,而无需过多关注底层系统的复杂性。 1. **EJB类型**: - **Session Bean**:代表...
1. Session Bean的生命周期:从实例化、激活、被动使用到最终的销毁,理解每个阶段的方法调用和状态转换。 2. 无状态Session Bean(Stateless Session Bean):这种类型的Bean不保存任何客户端特定的状态,适合执行...
- **容器管理**:EJB容器负责Bean的生命周期管理,包括实例化、事务管理、安全性等。 - **异常处理**:EJB提供了标准的异常处理机制,允许开发者定义和处理业务异常。 - **测试代码**:通常会有单元测试或集成测试来...
**EJB3.0无状态SessionBean例子** Enterprise JavaBeans(EJB)是Java平台上的一个核心组件,用于构建企业级分布式应用。EJB3.0是EJB规范的一个重大改进,它引入了诸多简化开发的新特性,使得EJB更加轻量级且易于...
其中,Spring Bean生命周期的管理是Spring框架的核心功能之一,它涉及Spring容器如何创建、配置以及销毁Bean的整个过程。理解Spring Bean的生命周期对于开发高效和可维护的Java应用至关重要。 Spring Bean生命周期...
描述中的"有状态的简单的会话Bean的实现,里面有详细的设计过程截图以及源代码",意味着我们可以期待看到一个实际操作示例,通过设计过程的截图来直观地了解SFSB的生命周期管理,以及如何编写和部署源代码。...
本文将详细介绍 Spring Bean 生命周期的概念、生命周期图、生命周期阶段、生命周期管理方式等相关知识点。 一、 Spring Bean 生命周期概述 Spring Bean 生命周期是指 Spring 容器中 Bean 的创建、初始化、销毁等...
Session Bean 的生命周期包括创建、激活、被动化和销毁四个阶段。容器负责管理这些阶段,确保在正确的时间进行资源分配和释放。开发者可以通过实现特定的生命周期方法来控制这些过程,如`@PostConstruct`和`@...