2015-06-11 28 views
3

我目前正在研究一個需要導入數據並做一些處理的Web應用程序。這可能需要一些時間(可能在「數分鐘」範圍內,一旦數據集增長),所以我們在後臺運行它 - 現在是顯示前端狀態的時間,而不是拖尾日誌文件:)輪詢Java EE後臺任務狀態 - 如何?

前端使用Angular,連接到通過JPA執行持久性的EJB中的REST端點(JAX-RS)調用服務。在JBoss EAP 6.4/AS 7.5(EE6)中運行。標準的東西,但這是我第一次與Java EE打交道。

關於查詢狀態,定期輪詢REST端點是否正常 - 我們不需要像websockets那樣的花哨東西。不過,我們確實需要支持多個後臺作業,以及由runstate(運行/完成/錯誤),進度和錯誤列表組成的信息。

所以,我現在有兩個問題:

1)是否有推出比調用EJB @Asynchronous方法後臺任務的更合適的方式?

2)我有哪些選項可以跟蹤後臺任務,哪些最適合?

我的第一個想法是保留一個HashMap,但是那個看起來像過多的手動(並且看起來很脆弱)的代碼具有併發性和生命週期問題 - 我不喜歡重新發明輪子。這種安全的選擇似乎是JPA堅持它,但對於不穩定的狀態信息來說似乎有點笨拙。

我顯然沒有面臨這些問題的第一人,但我的谷歌福似乎缺乏在使用@Asynchronous此刻:)

+0

你需要爲你的過程是什麼樣跟蹤信息的? –

+0

我希望能夠將後臺任務與自定義狀態類的實例關聯起來 - 在帖子中提到了必要的信息:) – snemarch

回答

2

任務可以啓動或使用JMS @MessageDriven

來自java-ee-7 ManagedExecutorService也是一個選項。

然後,這些任務將更新它們自己的狀態,這些狀態存儲在中的@Singleton EJB內。

如果您是在集羣環境中,任務的狀態,更好地使用JPA存儲,如@Singleton不是整個集羣

+0

我嘗試使用@Singleton實現解決方案,但是破壞了重新進入 - 我會嘗試修復它,當我有更多的時間,但現在JPA似乎是安全的賭注。 – snemarch

+0

你的單身課程是什麼樣的?這應該是可以避免的 –

+0

單例問題竟然是缺少@ConcurrencyManagement註釋。這麼晚纔回復很抱歉! – snemarch