使用@predestroy方法在会话结束时执行挂起的指令?

时间:2012-08-14 18:17:50

标签: jsf jsf-2 session-scope

将待处理的执行列表存储在会话范围bean中的Web应用程序中的用户操作的上下文中是否安全?然后通过@Predestroy带注释的方法在会话结束时可靠地执行这些操作(我的意思是,@predestroy方法的安全性未被调用&因此在某些情况下不执行操作!?)。

2 个答案:

答案 0 :(得分:0)

您可能希望将逻辑移动到HttpSessionListener实现(它是一个接口)。您将触发sessionDestroyed事件(通过在具体实现中实现该方法)。

这很容易,使用和处理这种事情的好地方(我在当前产品中实现了一个作为JMX bean来处理运行时的控制会话)。

TIA

答案 1 :(得分:0)

在@preDestroy方法中存储挂起的执行或数据库提交是完全安全的。在这种状态下,Managed bean不会被销毁。因此托管bean的状态将与bean内部的常规方法调用相同。请参阅以下文档。

http://docs.oracle.com/javaee/6/tutorial/doc/gmgkd.html#gmghg

“使用@PreDestroy注释准备破坏托管Bean 准备销毁托管bean指定生命周期回调方法,该方法表示应用程序组件即将被容器销毁。

在托管bean类或其任何超类中,准备销毁托管bean。 在此方法中,执行在销毁bean之前所需的任何清理,例如释放bean一直持有的资源。

使用javax.annotation.PreDestroy批注注释方法的声明。 CDI在开始销毁bean之前调用此方法。“