2014-01-22 63 views
0

我有一個要求,作爲Web服務[Java]的一部分,我將作業的詳細信息輸入到數據庫中,該數據庫是異步處理的通過Windows服務[C#]並對Java Web服務進行HTTP Restful調用,以通知作業的狀態。響應基於從Java中的另一個異步Web服務收到的響應的Web服務

場景:

  • 客戶端發出的Java Web服務同步雷斯特夫爾電話。
  • Java Web Service將作業詳細信息輸入數據庫(類似於進行異步調用)並等待Windows服務(這是對Java Web服務的新HTTP請求)的響應。
  • 根據收到的響應,Java Web Service需要回應等待同步呼叫的客戶端。

我們該如何在Java Web Service中實現這一點?

編輯:我已經使用Jersey框架實現了寧靜的web服務,並在Jetty服務器上運行。

回答

0

根據您使用的Jersey和Jetty版本的不同,您可以使用在Servlet 3.0中添加的支持asynchronously handling requests。 (基於Jetty Wikipedia page,我相信你至少需要碼頭8.x的基礎上this article,我相信你至少需要新澤西州/ JAX-RS 2.0)。

Jersey documentationJAX-RS API docs有怎樣的例子異步(即在另一個線程)完成未完成的請求:

@Path("/resource") 
public class AsyncResource { 
    @GET 
    public void asyncGet(@Suspended final AsyncResponse asyncResponse) { 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       String result = veryExpensiveOperation(); 
       asyncResponse.resume(result); 
      } 

      private String veryExpensiveOperation() { 
       // ... very expensive operation 
      } 
     }).start(); 
    } 
} 

在你的情況,你會在AsyncResponse對象存儲在這樣的方式,一旦你收到了其他Web服務的響應,完成由請求打電話給resume用你想發送給客戶端的任何響應。

參見:

What is the purpose of asynchronous JAX-RS

JAX-RS and Long Polling