2014-01-22 57 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