【问题标题】:Kill ViewScoped bean if user closes browser improperly (instant browser termination)如果用户不正确地关闭浏览器,则终止 ViewScoped bean(即时浏览器终止)
【发布时间】:2012-08-22 20:19:30
【问题描述】:

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

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

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

【问题讨论】:

  • 这不是您问题的答案,但如果您的支持 bean 是那么“重”,请考虑拥有一个执行实际业务逻辑的 EJB 池,例如。让视图 bean 将命令传达给由 EJB(池?)运行的模拟器。

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


【解决方案1】:

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

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

长话短说,如果:

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

【讨论】:

  • 不幸的是,问题很严重,因为每个烘焙 bean 都会在服务器上启动非常繁重的操作(运行完整的硬件模拟器)。
猜你喜欢
  • 2015-04-23
  • 1970-01-01
  • 2014-10-24
  • 2018-01-22
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
相关资源
最近更新 更多