想象一下用户使用一些使用ViewScoped支持bean的JSF页面的情况。在导航到应用程序内的不同页面的情况下,将自动调用bean的自定义析构函数(即@PreDestroy)。如果用户正确关闭选项卡/窗口,可以通过AJAX在服务器上调用远程命令以释放bean。
然而,如果只是电源在用户端失败并且PC立即关闭或者浏览器被不正确地终止以致不能调用JS代码会怎样。这意味着bean将永远使用其资源挂在服务器端。 如何解决此类问题?
我想到的一个解决方案是在页面上放置一个PrimeFaces poll元素,它将通过远程命令“ping”托管bean。如果bean注意到超时,那么它将自行终止释放所有资源。有没有更好的解决方案来解决这个问题? THX。
答案 0 :(得分:0)
基本上,ViewScoped bean的持续时间不会超过会话。会话超时是可配置的,因此bean不会“永远挂在服务器端”。
但是,您可以实现基于轮询的解决方案来释放视图范围bean使用的内存。但是,由于突然断电甚至意外关闭的浏览器很少发生(与“正常”使用相比),直接由轮询产生的资源浪费将比浪费的内存昂贵得多。长话短说,如果出现问题就不存在: