javax.faces.application.ViewExpiredException:在负载测试
问题描述:
我们使用的是Sun的JSF 1.2,7.0的WebSphere为我们的应用程序,我们只在负载测试javax.faces.application.ViewExpiredException:在负载测试
我已经通过下面的链接去获得ViewExpiredException
javax.faces.application.ViewExpiredException: View could not be restored
遵循大部分的东西,
-
设定背景PARAM,
com.sun.faces.enableRestoreView11Compatibility 真正
-
指示浏览器不是在所有JSP页面的顶部添加下面的代码缓存动态JSF页面,
res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); res.setHeader("Pragma", "no-cache"); res.setDateHeader("Expires", -1);
当我们手动浏览应用程序时,我们没有得到例外。我无法弄清楚这个问题。
请指教。
答
视图存储在会话中。存储在会话中的默认最大视图数量是15,可通过com.sun.faces.numberOfViewsInSession
上下文参数进行配置,该数量位于Mojarra中。
想象一下,最终用户在同一会话的至少16个不同浏览器选项卡/窗口中打开一个带有窗体(实际上是一个视图)的随机JSF页面。然后在第一个打开的选项卡/窗口中提交表格将会抛出ViewExpiredException
。负载测试期间可能也是如此。负载测试应该更好地创建不同的会话。
正如您发现自己的答案中所述,唯一的解决方法是将JSF状态保存方法设置为client
而不是server
。禁用浏览器缓存仅防止ViewExpiredException
发生在最终用户从浏览器缓存中获取的页面上(例如通过按回按钮等)。
但是,与客户端节省相比,BalusC作为一种性能优化方式,在大多数提到的具有服务器端节省的链接方面进行了优化。所以也必须考虑这一点。 – Hariharbalaji 2012-07-31 11:42:17
我没有说过客户端状态保存比服务器端状态保存更快。我只说过对特定的'ViewExpiredException'的唯一修复就是使用客户端状态保存。是否使用它取决于你。 – BalusC 2012-07-31 11:46:48
对不起!为了混淆,我没有打算说你已经告诉客户端状态保存比服务器端状态保存更快。我只是在问一个建议。谢谢 – Hariharbalaji 2012-07-31 12:04:28