2011-09-30 115 views
1

我正在創建一個JBoss服務器來部署一個Java應用程序,它將成爲一個類似REST的servlet,從請求中提取數據並將它們放入SQL數據庫。JBoss服務器上的Java應用程序中的「主循環」

我的主要問題:是否可以在JBoss服務器上設置一個類,該類不是基於請求運行的,而更像是一個主循環。即只是一個會「睡眠」的循環,然後檢查一些信息,然後做一些事情或再次入睡。

基本上我試圖做的是將一堆數據寫入文件,一旦該文件填滿某個點,一次寫入數據庫以減少連接開銷。

我最好的猜測是我可以用循環編寫任何類的類,並讓它以我想要的方式運行(只要我的「睡眠」技術是正確的,以允許servlet在相同的JBoss時間跑)。

我不知道但是如何讓主循環不斷運行;只需在構造函數中調用它?我知道如何讓服務器在服務器上運行的唯一方法是在web.xml中設置映射並主動向服務器發送網頁請求信息... 是否有更好的(更容易閱讀的)服務比JBoss和Java進行類似事先知道

謝謝,我已經搜索相當難的是這樣的一個解釋,但似乎我缺少正確的關鍵字...

回答

3

@Startup有一個look@Singleton豆。

總之,你可以寫這樣的事情:

@Startup @Singleton 
public class MainLoopBean { 

    @PostConstruct 
    public void mainLoop() { 
    } 

} 

理想情況下,你應該對夫婦這與timer service。當一些工作量完成並且你想暫停時,只需安排稍後調用的方法並返回即可。

+0

感謝您在進一步審查時的快速回復,這是我正在尋找的! – Adam

+0

不客氣!很高興它有幫助。 :) – Behrang

1

如果連接開銷真的影響到您的性能,您可以在JBoss中更改連接池設置。這將使應用程序變得更簡單,更健壯和可擴展。寫入一個文件不會擴展到多個並行連接。它還需要比直接寫入數據庫更多的IO。

+0

好,我們還沒有觀察任何實際的數據,但性能問題。但是,這個想法是一羣客戶端(將在我們所有最終用戶的機器上運行)將每個會話的一堆數據推送到這個分析數據庫。我只是想,許多連接被打開和關閉是沒有必要的。 雖然關於具有多個連接的單個文件,這是一個很好的觀點。寫一個「線程安全」的文件I/O將會困難得多。 – Adam

1

你爲什麼要考慮循環?爲什麼不設置一個JMS隊列和一個監聽器呢,就這樣,一旦發生什麼事情,你就可以迴應。不需要循環,沒有特殊的鉤子,什麼都不需要。另外,如果你真的有興趣做更復雜的事情,可以看看Java連接器體系結構,它也爲你提供了這些類型的鉤子。

相關問題