2011-03-18 65 views
2

我正在設計一個服務器應用程序,它應該可以連續收集大量數據,並使用Web界面按需提供結果。J2EE - 實現不斷運行的組件/守護程序

的操作方案變爲大致是這樣的:

  1. 一種電子傳感器陣列不斷通過USB
  2. A「沖洗器」的應用程序進程的數據溢出數據轉換成虛擬盤一樣快,它可以和其加載到分貝(暫存區域)
  3. 使用觸發器,在另一模式(數據區域中的數據和存儲結果)分貝執行計算
  4. 客戶端的web應用可以顯示在按需
  5. 圖表/報告等處理後的數據

該解決方案將理想是這樣的:

  1. 數據庫服務器 - PostgreSQL的
  2. 有一個管理Web界面,可以監測沖洗器(即記錄每小時處理或類似的東西),如果作爲單獨的守護進程實施,控制它。
  3. 沖水器和客戶端應用程序用Java編寫的,最理想的是採用J2EE

現在一直纏着我的問題,我無法找到答案:如何去寫的沖水器組件,即一個過程,不斷在J2EE中運行在後臺。

通過精練的幅材,基本上三種可能性出現了:

a)寫出的沖水作爲消息驅動Bean,使用JMS從主應用控制它。但是,我不喜歡讓MDB不斷運行的想法,我甚至不確定這是可能的。

b)將沖洗器寫入EJB並使用定時器/計劃服務進行控制。然而,這些事件並不是真正的時間,它只需要在無限循環中運行,直到被告知不這樣做,這似乎是錯誤的技術使用。 c)將沖洗程序作爲單獨的java應用程序寫入,作爲OS服務(Linux或Windows)運行,並通過EJB調用的ProcessBuilder使用啓動腳本進行控制。要監視它的狀態,請使用JMS。然而,在我看來,這似乎是過於複雜的解決方案,依賴於平臺,甚至可能不可靠,因爲EJB不應該產生/管理自己的線程,而ProcessBuilder基本上就是這樣做的,這似乎是錯誤的。

基本上,這些看起來都不對,我無法弄清楚,我們在Java/J2EE世界中的正確解決方案是什麼。

謝謝 托馬斯

+0

「MDB不斷運行」完全可以。事實上,這就是他們應該如何工作。您部署您的MDB,然後在它們到達時立即處理消息。這就是說,我不認爲多邊發展銀行在這種情況下是正確的。您需要另一個將傳感器數據封裝在JMS消息中的進程,然後將其放在某個隊列中,這似乎會增加不必要的複雜性。 – 2011-03-18 14:53:46

+1

謝謝你的回答,他們非常有幫助。爲了詳細說明MDB的主題,我瞭解了它們背後的原理,但讓我們在這種情況下澄清它:我經常運行的意思是,我將發送一條消息給bean,它會調用一個本身會以無限循環運行,處理和刷新數據。這就是錯誤,因爲容器無法正確管理bean(我推測),因爲執行該方法只會退出Web界面發送的停止消息,或者退出服務器關閉。 – 2011-03-18 15:11:57

+0

我明白你現在在說什麼。我同意,這對於MDB應用程序來說是一個糟糕的設計。 – 2011-03-18 17:18:47

回答

2

我就寫了「沖水器」的應用程序作爲一個獨立的Java進程。也許可以使用Java Service Wrapper之類的東西將它變成爲您的操作系統的服務。我並不十分熟悉通過Java與RAM磁盤接口的選項,但是您最終將得到一個InputStream,您可以在該過程的整個過程中保持開放狀態並持續讀取數據,或者您將持續輪詢內部循環。這是完全可以做到像下面這樣:

private volotile boolean stopFlag; 

... 

while(!stopFlag) { 
    processNextInput(); 
} 

那麼你就必須在當你想要終止該進程,可以設置stopFlag爲true另一個線程一些其他機制。

至於監測沖水JMX似乎是一個很好的解決方案。這正是它的目的。您將創建一個MBean,它將公開您想要的任何類型的狀態或統計信息,然後其他進程可以連接到該MBean並查詢該數據。然後

「客戶端」的應用程序將是這不你的數據庫上的報告,並提供一個非常正面從沖水結束爲MBean一個簡單的servlet應用程序。或者,您可以使用JMX控制檯監視沖洗器,甚至不涉及客戶端與該系統的一部分。

我不認爲EJB的真正意義了這個系統。我對EJB有些偏見,所以請盡我所能提供一些建議,但對我來說,在這個應用程序中並不需要他們。

+0

那麼,沖洗器/ JMX解決方案看起來不錯(應該由我自己來實現),我唯一不能做的就是從客戶端/監控webapp開始停止刷新守護進程(假設它的組件運行在J2EE容器環境中),是否正確? – 2011-03-18 15:42:34

+0

我已經實現了一些非常相似的東西,雖然使用了Apache Daemon代碼:http://commons.apache.org/daemon/jsvc.html。 JMX監控非常簡單,讓我使用Zenoss繪製性能統計數據。 – 2011-03-18 16:35:31

+0

@阿德里安:這是值得研究的有趣建議。謝謝你。 – 2011-03-18 17:27:32

相關問題