【译】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来说,当有大量客户端访问的时候,它是具备良好的伸缩性的。

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

2011041000392886.jpg

转载于:https://www.cnblogs.com/dlljc/archive/2011/04/10/2011022.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值