簡體   English   中英

Wicket:如何處理長時間運行的任務

[英]Wicket: how to handle long running tasks

我已經設置了一個Wicket + Hibernate + Spring Web應用程序,它涉及收集一些數據(生成並返回一些文件),將其存儲在數據庫中,創建一些圖像並在網頁上顯示所有這些。

這一切都適用於短期運行,但有時收集數據(涉及一些遠程數字運算)需要太長時間(20多分鍾)和超時。 我嘗試使用兩種方法來解決這個問題,但它們都顯示出一些問題。

第一種方法是使用AjaxLazyLoadPanel ,只是在getLazyLoadComponent中執行所有操作。 這在短期運行中運行良好,但是對於20多分鍾的運行,由於超時,LazyLoadComponents不會加載(那里有好的矛盾)。

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

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

我現在想知道這些中的任何一個是否更適合解決我在運行任務和之后將數據存儲在數據庫中的超時問題,或者是否有任何其他解決方案可能對此有幫助情況。

我真的很想知道一種新的方法是否可行,然后我再花一天時間實現可能最終無法工作的東西。

最好的祝福,
蒂姆

我知道我們已成功使用帶有附加AjaxSelfUpdatingTimerBehavior的Panel。 任務和結果部分與視圖邏輯分離,但可通過您創建的服務訪問視圖。 我們使用的服務實現負責啟動TheadPool或ExectutorService來運行各個任務。 該服務可以提供監視正在發生的特定作業/呼叫的進度/狀態的方法。 完成后,它還應該為視圖提供數據。 將SessionFactory注入服務實現(或注入DAO)應該足以在WebSession之外創建HibernateSession。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM