2012-07-31 134 views
1

我們使用的是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); 
    

當我們手動瀏覽應用程序時,我們沒有得到例外。我無法弄清楚這個問題。

請指教。

回答

2

視圖存儲在會話中。存儲在會話中的默認最大視圖數量是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