我正在运行 myFaces 2.1.7 并拼命地试图减少我们 Web 应用程序的内存使用。基本上每个用户的会话大小会膨胀到我们无法处理的 10MB。
我尝试将以下内容添加到描述符:
<context-param>
<param-name>org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION</param-name>
<param-value>3</param-value>
</context-param>
结果没问题,任何给定用户的会话大小都不会超过 1MB。但是,自从更改以来,很多用户都无法登录。发生的事情是在登录屏幕上抛出 ViewExpiredException ,我编写了一个自定义 viewExpiredException 类,将用户重定向回登录屏幕,所以基本上他们卡在登录屏幕循环中
try to log in ---> ViewExpiredException thrown ---> Custom ViewExpiredHandler ----> Forward user to Login Screen
<----------------------------------------------------------------------------------------------------------------
删除上面的上下文参数解决了这个问题!我的问题是一个-
1) why is the viewException is thrown when the NUMBER_OF_VIEWS_IN_SESSION is reduced from its default value
2) is it possible to work around the issue by using the custom ViewExpiredHandler class ? how?
3) am i doing something wrong in causing this issue?
PS 在测试为什么会发生这种情况时,如果我打开例如 IE 并尝试登录一切正常,但是如果我尝试打开另一个浏览器(例如 chrome)并使用另一个用户名登录,则遇到用户报告的镜像问题不是能够登录。
同样遵循 myFaces wiki 的提示,我在描述符中添加了以下内容,但我认为它不会导致问题:
<context-param>
<param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param-name>
<param-value>false</param-value>
</context-param>
更新:
正如我所建议的那样,BalusC
我将其更改为STATE_SAVING_METHOD
以client
解决我们遇到的内存问题。立即所有 UAT 测试人员都报告说所有页面加载速度都急剧下降,所以我不得不恢复STATE_SAVING_METHOD
设置为server
.
由于我一直在尝试使用 的值org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION
和当前值6
(比默认的 20 个会话提高 70%),因此我不再遇到ViewExpiredException
错误。(最初创建此问题的原因)
但在某种程度上,我正在玩俄罗斯轮盘赌。我真的不知道为什么将值org.apache.myfaces.NUMBER_OF_VIEWS_IN_SESSION
设置为 3/4/5 不起作用以及为什么 6 起作用,这让我无法解释它感到困扰。有没有人可以提供信息?