2011-04-23 99 views
1

我正在研究一個應用程序,該應用程序使用servlet來獲取和設置最終用戶使用的JSP的數據。在寫入數據庫之前或從數據庫中檢索數據之前,所有數據都由處於會話狀態的servlet操縱。從Java servlet調用線程

但是其中一些數據庫操作相當冗長,其中涉及動態創建表,插入數據或從表中讀取數據等大量IO操作。此過程還需要各種第三方產品,如Weka和Lucene;所以存在顯着的處理器負載。我預計這些時間中的一些可能需要一兩分鐘的時間並鎖定會話。

servlet通常會在這些操作的類中調用靜態方法,然後返回所需的數據類型。所以這是我的問題。這是明智的還是將這些操作實現爲直接從servlet調用的Java線程或者我需要線程管理器會更好?我是一個線程新手。

的用於在Servlet上面的代碼的一個例子是這樣的:

 // Create Data_Miner. 
     Data_Miner dm = Data_Miner_ReaderWriter.write(activeUser.getUser(), rssfodm); 

     // Create output. 
     if (rssfodm.getDataMinerOutputType() == Data_Miner_Output_Type.DECISION_TREE) { 
      Decision_Tree dt = Decision_Tree_ReaderWriter.write(dm); 

兩種方法調用是靜態方法中含有的方法來讀/寫相關的對象類。

謝謝

摩根先生。

回答

3

使用異步處理以及類似於回調處理程序和郵箱的功能,用戶可以返回並在準備就緒時獲得結果。

由於您使用的是Java,因此您還可以考慮使用JMS消息驅動的POJO(Spring)或EJB(EJB標準)來接受長時間運行的事務的請求。

+0

+1提示異步處理和結果收件箱。長時間運行的進程不應該被綁定到請求鎖定資源。 – 2011-04-23 16:22:43

+0

我同意將一個長時間運行的作業綁定到一個servlet並不是一個好主意,但它是我目前在開發中所擁有的。所以回調是可以查看或者可能通過石英提交作業到隊列中的,然後通過電子郵件發送給用戶。 – 2011-04-23 16:26:23

+0

電子郵件網址爲「在此處顯示您的結果」。這就像UPS包裹跟蹤模型。 – duffymo 2011-04-23 16:28:19