即使会话无效,托管bean也不会被释放

时间:2011-06-29 07:56:50

标签: jsf primefaces lifecycle

我有一个由Tomcat 6提供服务的JSF应用程序,并且每个会话都可以将“会话”范围内分配给它的viewScoped bean作为托管bean。问题是用于存储此bean的内存似乎没有被释放,即使会话已经在空闲状态下花费了数小时。

有没有办法强制Tomcat在会话空闲一段时间后(例如10分钟)解除分配内存?如果没有,如何以编程方式手动释放此内存?或者是“会话”范围中“托管bean”的功能之一,它将在内存中持续存在,直到服务器关闭,无论如何? 提前谢谢!

但viewScoped bean可能无法解除分配。因为如果单击过期页面上的链接,则tomcat控制台中的日志显示服务器端的UIViewRoot仍处于活动状态。日志: beforePhase-RESTORE_VIEW 1 afterPhase -RESTORE_VIEW 1时间:3 beforePhase-RENDER_RESPONSE 6 并且服务器进程的内存没有下降一点。如果服务器运行时间相对较长。应用程序的响应非常缓慢,并且似乎不够健壮,例如分页器不起作用等等。 即使服务器关闭,控制台打印输出: 等待16个实例被解除分配

有人知道吗?

1 个答案:

答案 0 :(得分:0)

您的会话作用域托管bean无法取消分配,因为会话尚未超时。您需要在部署描述符文件(web.xml)中指定会话的可接受超时。以下示例仅需几分钟。 10分钟后,会话将失效,您的会话范围bean应该被销毁。

<session-config>
      <session-timeout>10</session-timeout> 
</session-config>