如果用户不正确地关闭浏览器,则终止ViewScoped bean(即时浏览器终止)

时间:2012-08-28 10:24:33

标签: java-ee jsf-2 managed-bean

想象一下用户使用一些使用ViewScoped支持bean的JSF页面的情况。在导航到应用程序内的不同页面的情况下,将自动调用bean的自定义析构函数(即@PreDestroy)。如果用户正确关闭选项卡/窗口,可以通过AJAX在服务器上调用远程命令以释放bean。

然而,如果只是电源在用户端失败并且PC立即关闭或者浏览器被不正确地终止以致不能调用JS代码会怎样。这意味着bean将永远使用其资源挂在服务器端。 如何解决此类问题?

我想到的一个解决方案是在页面上放置一个PrimeFaces poll元素,它将通过远程命令“ping”托管bean。如果bean注意到超时,那么它将自行终止释放所有资源。有没有更好的解决方案来解决这个问题? THX。

1 个答案:

答案 0 :(得分:0)

基本上,ViewScoped bean的持续时间不会超过会话。会话超时是可配置的,因此bean不会“永远挂在服务器端”。

但是,您可以实现基于轮询的解决方案来释放视图范围bean使用的内存。但是,由于突然断电甚至意外关闭的浏览器很少发生(与“正常”使用相比),直接由轮询产生的资源浪费将比浪费的内存昂贵得多。

长话短说,如果出现问题就不存在:

  • 您正在使用客户端状态保存
  • 您正在使用服务器端状态保存并且会话超时配置正确