2012-05-03 31 views
0

我有一個簡單的java web服務。我想要讓Web服務進行線程化,每個對Web方法的調用都有自己的線程來處理。處理需要很長時間,我不希望它阻止,阻止對Web方法的其他調用發生。相反,我希望web方法只創建線程,並讓線程本身在完成處理後向客戶端響應/返回值。那可能嗎?如何使一個Web服務使用多線程?

編輯:

這裏是什麼,我現在所擁有的半僞代碼:

@WebService(endpointInterface="Service") 
public class ServiceImpl { 

    public ServiceImpl() 
    { 
     // Initialization 
    } 

    public String GetResult(input) 
    { 
     // Does long processing 

     return Result; 
    } 
} 

我想要做的就是調用getResult()執行長處理,而不是,我想它唯一產物Runnable將執行長處理並且GetResult()返回並準備好處理另一個請求。我也希望Runnable響應等待的客戶端。

編輯2:

我只是意識到,我問一個愚蠢的問題。我很新實現WS的。我曾認爲WS只是一次接一個請求。我不知道每個請求已經自動線程化。

+1

這是可能的。你有什麼嘗試。你做了什麼搜索。你看過什麼代碼?請編輯您的問題並提供更多詳細信息。 – Gray

+0

你有什麼樣的客戶?服務器端?命令行/批處理? GUI?搖擺? JavaFX的? – Puce

+0

看起來你確實要求WS是異步的......這也是可能的。 – vkraemer

回答

2

是的,您可以使用JMS進行異步調用。這是最好的方法。

你也可以啓動一個線程,並自己管理它們。這通常不被推薦。線程池的良好管理以及跟蹤哪些線程可能需要很長時間才需要大量的開銷代碼。

+0

我不在尋找異步調用,因爲我不在乎客戶端是否在等待響應時被掛起(我甚至延長了超時時間)。由於處理時間相當長(約10分鐘),我更關心的是WS一次只能服務一個客戶端。 –