在我們的wicket應用程序中,我需要啓動一個長時間運行的操作。它將與外部設備進行通信,並在一段時間後(最多幾分鐘)提供結果。如何處理從檢票口使用工作線程時的序列化?
爪哇式的長期運行操作是通過一種可以提供回調的方法啓動的。
public interface LegacyThingy {
void startLegacyWork(WorkFinished callback);
}
public interface WorkFinished {
public void success(Whatever ...);
// failure never happens
}
在我的檢票頁我打算添加一個Ajax按鈕來調用startLegacyWork(...)
提供適當的回調。對於結果我會顯示一個面板,使用AbstractTimerBehavior輪詢結果。
什麼博格爾斯我心中是以下問題:
爲了保持狀態檢票序列化組件樹與數據一起,因此需要對數據進行包裹在序列化模型(或可拆卸機型)。
因此,爲了保持結果面板和WorkFinished回調之間的「連接」,我需要一些方法在Wicket的「We serializeize everything」世界和「Hey I'm a Java Object沒有人管理我的一生「傳統界面的世界。
我當然可以存儲正在進行的操作在一種全球地圖,並使用一個Wicket可拆卸的模型,看起來他們增長ID ...但是,感覺很髒,我不認爲這是正確的做法。 (它爲這類事情的生命週期開闢了一大堆蠕蟲)。
或者我正在看如何從檢票口做長時間運行操作的完全錯誤的角度?
Looking StoredResponsesMap我發現Wicket的MostRecentlyUsedMap至少可以處理一些我不想實現自己的問題(lifetime,max count)。 但是目前我嘗試以另一種方式解決問題(使用較低級別的接口連接舊系統,因爲較低級別的接口給了我一些可序列化的ID以供使用)。 – froh42 2012-04-04 13:37:48