我正在設計一個服務器應用程序,它應該可以連續收集大量數據,並使用Web界面按需提供結果。J2EE - 實現不斷運行的組件/守護程序
的操作方案變爲大致是這樣的:
- 一種電子傳感器陣列不斷通過USB
- A「沖洗器」的應用程序進程的數據溢出數據轉換成虛擬盤一樣快,它可以和其加載到分貝(暫存區域)
- 使用觸發器,在另一模式(數據區域中的數據和存儲結果)分貝執行計算
- 客戶端的web應用可以顯示在按需 圖表/報告等處理後的數據
該解決方案將理想是這樣的:
- 數據庫服務器 - PostgreSQL的
- 有一個管理Web界面,可以監測沖洗器(即記錄每小時處理或類似的東西),如果作爲單獨的守護進程實施,控制它。
- 沖水器和客戶端應用程序用Java編寫的,最理想的是採用J2EE
現在一直纏着我的問題,我無法找到答案:如何去寫的沖水器組件,即一個過程,不斷在J2EE中運行在後臺。
通過精練的幅材,基本上三種可能性出現了:
a)寫出的沖水作爲消息驅動Bean,使用JMS從主應用控制它。但是,我不喜歡讓MDB不斷運行的想法,我甚至不確定這是可能的。
b)將沖洗器寫入EJB並使用定時器/計劃服務進行控制。然而,這些事件並不是真正的時間,它只需要在無限循環中運行,直到被告知不這樣做,這似乎是錯誤的技術使用。 c)將沖洗程序作爲單獨的java應用程序寫入,作爲OS服務(Linux或Windows)運行,並通過EJB調用的ProcessBuilder使用啓動腳本進行控制。要監視它的狀態,請使用JMS。然而,在我看來,這似乎是過於複雜的解決方案,依賴於平臺,甚至可能不可靠,因爲EJB不應該產生/管理自己的線程,而ProcessBuilder基本上就是這樣做的,這似乎是錯誤的。
基本上,這些看起來都不對,我無法弄清楚,我們在Java/J2EE世界中的正確解決方案是什麼。
謝謝 托馬斯
「MDB不斷運行」完全可以。事實上,這就是他們應該如何工作。您部署您的MDB,然後在它們到達時立即處理消息。這就是說,我不認爲多邊發展銀行在這種情況下是正確的。您需要另一個將傳感器數據封裝在JMS消息中的進程,然後將其放在某個隊列中,這似乎會增加不必要的複雜性。 – 2011-03-18 14:53:46
謝謝你的回答,他們非常有幫助。爲了詳細說明MDB的主題,我瞭解了它們背後的原理,但讓我們在這種情況下澄清它:我經常運行的意思是,我將發送一條消息給bean,它會調用一個本身會以無限循環運行,處理和刷新數據。這就是錯誤,因爲容器無法正確管理bean(我推測),因爲執行該方法只會退出Web界面發送的停止消息,或者退出服務器關閉。 – 2011-03-18 15:11:57
我明白你現在在說什麼。我同意,這對於MDB應用程序來說是一個糟糕的設計。 – 2011-03-18 17:18:47