1、(EJB3.0 学习笔记二)Session Bean 的生命周期 关键字: Session Bean 生命周期 EJB 容器创建和管理 session bean 实例,有些时候,你可能需要定制session bean 的管理过程.例如,你可能想在创建 session bean 实例的时候初始化字段变量,或在 bean 实例被销毁的时候关掉外部资源.上述这些,你都可能通过在 bean 类中定义生命周期的回调方法来实现.这些方法将会被容器在生命周期的不同阶段调用(如:创建或销毁时).通过使有下面所列的注释,EJB 3.0 允许你将任何方法指定为回调方法.这不同于 EJB 2.1,EJB 2.1 中
2、,所有的回调方法必须实现,即使是空的.EJB 3.0 中,bean 可以有任意数量,任意名字的回调方法. PostConstruct:当 bean 对象完成实例化后,使用了这个注释的方法会被立即调用.这个注释同时适用于有状态和无状态的会话 bean. PreDestroy:使用这个注释的方法会在容器从它的对象池中销毁一个无用的或者过期的 bean 实例之前调用.这个注释同时适用于有状态和无状态的会话bean. PrePassivate:当一个有状态的 session bean 实例空闲过长的时间,容器将会钝化(passivate)它,并把它的状态保存在缓存当中.使用这个注释的方法会在容器钝化
3、bean 实例之前调用.这个注释适用于有状态的会话 bean.当钝化后,又经过一段时间该 bean 仍然没有被操作,容器将会把它从存储介质中删除.以后,任何针对该 bean 方法的调用容器都会抛出例外. PostActivate:当客户端再次使用已经被钝化的有状态 session bean 时,新的实例被创建,状态被恢复.使用此注释的 session bean 会在 bean 的激活完成时调用.这个注释只适用于有状态的会话 bean. Init:这个注释指定了有状态 session bean 初始化的方法.它区别于PostConstruct 注释在于:多个Init 注释方法可以同时存在于有状态 session bean 中,但每个 bean 实例只会有一个Init 注释的方法会被调用.这取决于bean 是如何创建的(细节请看 EJB 3.0 规范).PostConstruct 在Init 之前被调用. 另一个有用的生命周期方法注释是Remove,特别是对于有状态 session bean.当应用通过存根对象调用使用了Remove 注释的方法时,容器就知道在该方法执行完毕后,要把 bean 实例从对象池中移走. EJB 主要用在大型的分布式的项目。SessionBean:业务处理MDBean:消息服务EntityBean:JPA 持久化服务JSP/JSF/Servlet:页面