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

遵循大部分的东西,

  1. 设定背景PARAM,

    com.sun.faces.enableRestoreView11Compatibility 真正

  2. 指示浏览器不是在所有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发生在最终用户从浏览器缓存中获取的页面上(例如通过按回按钮等)。

+0

但是,与客户端节省相比,BalusC作为一种性能优化方式,在大多数提到的具有服务器端节省的链接方面进行了优化。所以也必须考虑这一点。 – Hariharbalaji 2012-07-31 11:42:17

+0

我没有说过客户端状态保存比服务器端状态保存更快。我只说过对特定的'ViewExpiredException'的唯一修复就是使用客户端状态保存。是否使用它取决于你。 – BalusC 2012-07-31 11:46:48

+0

对不起!为了混淆,我没有打算说你已经告诉客户端状态保存比服务器端状态保存更快。我只是在问一个建议。谢谢 – Hariharbalaji 2012-07-31 12:04:28