2012-08-28 52 views
0

想象一个用户可与一些JSF页面,这使得使用ViewScoped后台bean的情况下杀死ViewScoped豆。在导航到应用程序中的不同页面的情况下,bean的自定义析构函数(即@PreDestroy)将自动调用。在用户正确关闭标签页/窗口的情况下,可以通过AJAX在服务器上调用远程命令以释放该bean。如果用户不正确关闭浏览器(即时浏览器终止)

然而,在用户端如果单纯电源出现故障时与PC机就立刻打开或浏览器被终止不当,使得没有JS代码可以被调用。这意味着bean将永远使用其资源挂在服务器端。 如何解决这个问题?

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

+0

它不是对你的问题没有回答,但是如果你的支持bean是“沉重的”,那么可以考虑让EJB池拥有真正的业务逻辑,例如。将bean bean命令传递给由EJB(池?)运行的模拟器。 – mabi

回答

0

基本上,ViewScoped豆不会持续超过会话更长。会话超时是可配置的,所以bean不会“永远挂在服务器端”。

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

长话短说,这个问题是不存在的,如果:

  • 您使用的客户端状态保存
  • 正在使用服务器端的状态保存和会话超时配置正确
+0

不幸的是,这个问题非常严重,因为每个烘焙bean都会在服务器上启动非常繁重的操作(运行完整的硬件仿真器)。 – azerIO