0

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

但是,如果只是用户侧的电源故障并且PC立即关闭或浏览器被不正确地终止以至于无法调用JS代码怎么办。这意味着 bean 将永远挂在服务器端使用它的资源。如何解决这样的问题?

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

4

1 回答 1

0

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

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

长话短说,如果:

  • 您正在使用客户端状态保存
  • 您正在使用服务器端状态保存和会话超时配置正确
于 2012-08-28T11:10:15.833 回答