有时需要在Session Bean中初始化和释放一些资源这些工作应该在SessionBean的@PostConstruct和@PreDestroy方法中进行其中用 @PostConstruct注释的方法在SessionBean的构造方法调用之后以后EJB容器在处理完一些其他工作后调用用 @PreDestroy注释的方法在SessionBean的对象实例被EJB容器销毁之前调用
除此之外当有状态的SessionBean存在一定时间未被调用时EJB容器会将该SessionBean对象钝化(Passivate)也就是保存在硬盘中当再次访问时EJB容器会激法该SessionBean在这两种情况下EJB容器会分别调用SessionBean的 @PrePassivate和@PostActivate方法可以在@PrePassivate方法中将sessionbean中的资源保存或释放如打开的数据库连接等在@PostActivate方法中可以恢复相应的资源如下面的代码所示
packageservice;
importjavautilArrayList;
importjavautilList;
importjavaxannotationPostConstruct;
importjavaxannotationPreDestroy;
importjavaxannotationResource;
importjavaxejbPostActivate;
importjavaxejbPrePassivate;
importjavaxejbSessionContext;
importjavaxejbStateful;
@Stateless
publicclassShoppingCartBeanimplementsShoppingCart
{
privateList<String>shoppingCart=newArrayList<String>();
@Resource
privateSessionContextsessionContext;
publicShoppingCartBean()
{
Systemoutprintln(constructor:+sessionContext);
}
@PrePassivate
publicvoidMyPassivate()
{
Systemoutprintln(passivate);
}
@PostConstruct
publicvoidinit()
{
Systemoutprintln(sessionContextgetInvokedBusinessInterface());
}
@PreDestroy
publicvoiddestory()
{
Systemoutprintln(destory);
}
@PostActivate
publicvoidstart()
{
Systemoutprintln(start);
}
@Override
publicvoidaddCommodity(Stringvalue)
{
shoppingCartadd(value);
}
@Override
publicList<String>getCommodity()
{
returnshoppingCart;
}
}