现在的位置: 首页 > 综合 > 正文

Session Bean 的生命周期

2013年10月19日 ⁄ 综合 ⁄ 共 1323字 ⁄ 字号 评论关闭
 

EJB容器创建和管理session bean实例,有些时候,你可能需要定制session bean 的管理过程。例如,你可能想在创建session bean 实例的时候初始化字段变量,或在bean 实例被销毁的时候关掉外部资源。上述这些,你都可以通过在bean 类中定义生命周期的回调方法来实现这些方法将会被容器在生命周期的不同阶段调用(如:创建或销毁时)。
 
通过使用下面所列的注释,EJB 3允许你将任何方法指定为回调方法。这不同于EJB 2EJB 2中,所有的回调方法必须实现,即使是空的EJB 3中,bean 可以有任意数量,任意名字的回调方法。
 
·@PostConstruct:当bean对象完成实例化后,使用了这个注释的方法会被立即调用。这个注释同时适用于有状态和无状态的会话bean
 
·@PreDestroy:使用这个注释的方法会在容器从它的对象池中销毁一个无用的或者过期的bean 实例之前调用。这个注释同时适用于有状态和无状态的会话bean
 
·@PrePassivate:当一个stateful session bean 实例空闲过长的时间,容器将会钝化(passivate)它,并把它的状态保存在缓存当中。使用这个注释的方法会在容器钝化bean 实例之前调用。这个注释仅适用于有状态的会话bean。当钝化后,又经过一段时间该bean 仍然没有被操作,容器将会把它从存储介质中删除。以后,任何针对该bean方法的调用容器都会抛出例外。该回调方法通常用于clean up resources, such as database connections, TCP/IP sockets, or any resources that cannot be serialized during passivation.
 
·@PostActivate:当客户端再次使用已经被钝化的有状态session bean 时,新的实例被创建,状态被恢复。使用此注释的session bean 会在bean 的激活完成时调用。这个注释只适用于有状态的会话bean该回调方法通常用于restore resources, such as database connections that we cleaned up in the PrePassivate method.
 
·@Init:这个注释指定了有状态session bean 初始化的方法。它区别于@PostConstruct
PostConstruct 注释在于:多个@Init注释方法可以同时存在于有状态session bean 中,但每个bean 实例只会有一个@Init 注释的方法会被调用。这取决于bean 是如何创建的(细节请看EJB 3.0 规范)。@PostConstruct @Init 之后被调用。
 
 
·@Remove:仅适用于有状态session bean。当应用通过存根对象调用使用了@Remove 注释的方法时,容器就知道在该方法执行完毕后,要把bean实例从对象池中移走,保存的状态当然也就被清除注意:在使用完stateful session bean的实例后,要调用有@remove注释的方法,否则该实例及其维护的state data不会自动销毁(除非过了timeout),这样会提高性能!
 

 

抱歉!评论已关闭.