2010-02-22 88 views
6

我設置一個Wicket +休眠+春Web應用程序,包括收集一些數據(已產生了一些文件,並返回),存儲在數據庫中這一點,創造一些圖像和顯示這一切在網頁上。檢票:如何處理長時間運行的任務

這一切工作正常進行短版印刷,但有時收集的數據(其中包括一些遠程數字運算)花費的時間太長(20分鐘以上)和超時。我試圖用兩種方法解決這個問題,但是他們都顯示出一些問題。

第一種方法是使用AjaxLazyLoadPanel S和剛做getLazyLoadComponent內的一切。這對於短期運行很有效,但對於超過20分鐘的運行,由於超時,LazyLoadComponents不會加載(那裏有很好的矛盾)。

第二種方法涉及創建一箇中間片段,其中添加了AjaxSelfUpdatingTimerBehavior,其持續時間設置爲10秒,用於輪詢在數字運算中創建的文件。這似乎使任務在後臺運行時沒有問題,但在返回的數據需要存儲在數據庫中時失敗。我在視圖模式中使用Open Session,但在20分鐘後試圖存儲數據時可能會失敗? (解決方案可能在於解決這個問題..)。

由於上述問題,現在我在讀的替代方法,以處理這些長期運行的任務和遇到:

我現在想知道如果這些可能更適合於解決我有兩個運行的任務和存儲在數據庫中的數據之後的超時問題,或者如果任何人有任何其他的解決方案,可能會在這種情況下幫助。

我真的很想知道,如果一個新的方法是可行的,我花一天實現的東西,可能會變成不畢竟工作之前。

最好的問候,

回答

3

我知道我們曾在使用帶有附加AjaxSelfUpdatingTimerBehavior一個小組成功。任務和結果部分與視圖邏輯分開,但可通過您創建的服務訪問該視圖。然後,我們使用的服務實現負責啓動用於運行單個任務的TheadPool或ExectutorService。該服務可以提供一種方法來監視正在發生的特定工作/呼叫的進展/狀態。一旦完成,它也應該使數據可用於視圖。將SessionFactory注入到服務實現(或注入的DAO)中應該足以在WebSession之外創建HibernateSession。

+0

謝謝,這件事情我想張貼問題,以及之後的(制定一個問題是,就像那樣的橡膠閃避)。我仍然必須知道這是否能夠真正解決問題,因爲日誌不會記錄超時會話的任何內容。只是在數據庫中缺少結果是不明智的。如果我瞭解更多信息,將會更新。 – Tim 2010-02-22 23:25:14

+1

結束了這種方法,並沒有任何問題,因爲..謝謝! – Tim 2010-02-27 17:57:48

+0

好聽Tim! – Matt 2010-03-01 04:27:02

相關問題