2013-06-12 119 views
0

我有一個Web應用程序(JSP/Servlets),我需要從中調用Web服務來獲取響應。由於Web服務需要大約4到5分鐘才能發送響應,因此應用程序將凍結,不允許用戶在應用程序上執行任何操作。從Servlet的獨立應用程序啓動線程

要解決此問題,我需要將Web服務調用委託給外部獨立應用程序的線程,以便Web服務調用變爲異步。有了這個,我有幾個問題:

  1. 什麼是從帶有參數的servlet中調用主程序的最佳方式。我正在考慮使用Runtime對象的exec()方法來調用.bat文件。比這更好的嗎?

  2. 我想爲每個請求的主程序啓動一個線程。但是爲每個請求調用主程序會每次啓動JVM(可能是昂貴的資源明智的)。是否有可能檢查主線程是否正在運行&如果是這樣,請在同一主線程上啓動新線程,而不是再次調用主程序。

請問誰能讓我知道什麼可能是最好的&非常昂貴的方式來處理?

在此先感謝。

回答

1

什麼是最好的方式從一個servlet調用主程序與 參數。我正在考慮使用Runtime對象的exec()方法調用 .bat文件。比這更好的嗎?

取而代之的是,海事組織,你在你的Web應用程序創建的線程類和並行

而且,在它執行的Web服務調用,如果你正在使用Servlet3 API,然後通過引入的一個新Async support API規範可能有幫助

1

有一個隊列或更好的但有一個MessageBroker在您的Web應用程序本身提交Web服務調用請求,並返回一個唯一的ID給用戶。

有一個線程來監視上面提到的Queue或MessageBroker,並將項目和產生的線程調出Web服務並等待它的響應,然後將它放入另一個隊列或MessageBroker中,或者使用完全一樣的狀態。

爲用戶提供一個UI以輸入唯一ID並檢索Web服務調用的結果。

這樣您就不必創建進程並可以使用線程管理所有內容。創建流程非常耗時,創建流程的設計可能會被黑客利用來減慢服務器速度,甚至導致崩潰,通過不斷髮送請求進行循環。

相關問題