会话bean的生命周期

原创 2005年05月19日 19:12:00

无状态session bean生命周期

  1. 当bean实例不存在时,容器调用bean类的newInstance()方法,开始bean的生命周期
  2. 接着,容器调用bean的setSessionContext()方法,进而调用ejbCreate()方法。此时,bean就创建完毕,其方法可供调用了
  3. 当容器不需要该bean实例的时候,容器调用bean的ejbRemove()方法,删除该实例

而有状态session bean的生命周期则复杂一些,因为涉及到钝化、激活和事务

有状态session bean生命周期

  1. 当客户调用create(args)时,容器调用newInstance()方法,剩下来的创建过程同无状态session bean。
  2. 有状态session bean的方法执行分为事务与非事务两种情况

    a. 不包含事务的方法在该bean处于ready状态后就可以执行

    b. 包含事务的方法执行就比较复杂:

        客户调用事务方法-->容器调用afterBegin()
        客户提交方法-->容器调用beforeCompletion()
        事务尝试提交,提交结果可能会成功,也可能会滚事务
        事务结束-->容器调用afterCompletion()
  3. 钝化与激活

    a. 当一个bean很久没有被操作时,容器会决定该bean是否应该被钝化(从内存中擦除, 将状态信息记入存储介质。)
        ps:有人说记录方法一定是java的序列化,其实不然。容器可以采取任何方法对状态信息进行记录。

    b. 钝化后,又经过一段时间该bean仍然没有被操作,容器将会把它从存储介质中删除。以后,任何针对该bean方法的调用容器都会抛出java.rmi.NoSuchObjException

    c. 若钝化后有针对此bean方法的调用,容器会激活该bean,将其重新加载入内存
  4. 当容器不需要该bean实例的时候,容器调用ejbRemove()方法,删除该实例

ejb容器只有在ejb实例不存在的情况下才会创建实例,否则,容器会在实例池中查找可用实例并复用。由于ejb不适那种轻量的,可以大量创建并删除的对象,所以,每次新实例的创建都会占用很大的资源。实例池的概念,以及钝化、激活,都是针对ejb这种特点而设计的。所以,当你的应用不需要分布式,安全,持久化以及事务处理时,你要考虑是否采取ejb这种重量级的数据层抽象。取而代之,诸如hibernate等轻量级的数据持久层,或者是直接使用JDBC来操作javabean这样谈不上量级的DAO都是可以选择的。

EJB 会话Bean的生命周期

@Stateful @Remote(HelloEJBRemote.class) public class HelloEJB implements HelloEJBRemote { public...

Ejb in action(五)——会话Bean的生命周期

会话Bean与消息驱动Bean、实体Bean的最重要的区别在于生命周期的差异性。会话Bean实例存活期较短,它和线程类似,包括对象的创建、初始化、运行、钝化、激活、销毁。 生命周期的概念,了解生物学的...

spring bean的生命周期测试代码

  • 2015年03月15日 01:17
  • 5KB
  • 下载

【Spring】- Bean的生命周期的init和destroy方法的三种方式

概述 在Spring中,向容器中注入一个Bean的时候可能期望在Bean的创建或者Bean的销毁的时候“做一些事情”,Spring支持三种方式来让我们实现。 实现方法 准备 Hello...

Spring bean生命周期demo

  • 2016年07月14日 21:37
  • 20KB
  • 下载

Spring Bean生命周期详解

Spring Bean生命周期详解

Spring管理的Bean的生命周期

  • 2016年10月16日 23:55
  • 3.23MB
  • 下载

Spring Bean的生命周期(非常详细)

Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周期是非常必要的。我们通常使用ApplicationContext作为Spring...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:会话bean的生命周期
举报原因:
原因补充:

(最多只允许输入30个字)