在我們的Seam應用程序中,我們有一個輪詢部分,只要在瀏覽器窗口/選項卡中保持打開頁面,就可以保持對話處於活動狀態,以允許用戶可以同時處理多個對象實例,而不會在「不活動」頁面上的對話過期時在另一個對話框上忙碌。檢查是否正在使用Seam對話,但沒有鎖定
一切工作正常,但當輪詢線程發送請求而另一個(長時間運行)正在進行時,我們每時每刻都會遇到對會話異常的可怕併發調用。我們已經將併發請求超時值設置得相當高(20s),並且大部分時間頁面的返回時間不到2s。但是,在用戶處理大量數據(並且他們願意等待這些頁面加載,而不管需要多長時間)的情況下,因此就通用優化而言,我們無能爲力。
我們正在尋找的是一種方法來檢查(在中央過濾器中,所有請求都會經過),如果對給定對話存在鎖定,而沒有嘗試獲取一個對話(以便不觸發異常if已經有一個鎖)。我們有辦法區分我們是否正在處理這些後臺線程中的一個(我們爲會話管理做了這些工作,因此它們擴展了會話,但不是整個會話)。如果我們能夠識別出對話已被使用,那麼我們可以跳過對此輪詢線程的處理,因爲在特定的時間不需要它的服務(對話正在使用,所以沒有過期的危險)。
TLDR:檢查是否有一個Seam對話的鎖,但不嘗試訪問它(這可能導致觸發談吐異常併發調用)
任何指針,建議,是極大的讚賞。
我知道有一種方法來排隊所有的請求,不知道如果這將是一個有效的方法給你。我現在不記得如何去做。 – Tiago 2011-02-04 16:01:08