如何在球衣服务中返回特定的回应

时间:2013-10-09 05:52:40

标签: java jersey timertask

我有一个球衣服务,其中包含一个计时器任务,用于轮询特定值。我只想在从轮询中获得特定值时才返回响应。有什么办法可以实现吗?

我的代码是:

@Path("/poll")
public class PollService{
    String response = null;
    @GET
    @Produces(javax.ws.rs.core.MediaType.TEXT_PLAIN)
    public String pollResponse(@Context HttpServletRequest request){
       MyTimer poller = new MyTimer();
       final Timer timer = new Timer();
       timer.scheduleAtFixedRate(poller, 0, 5000);
       return response;
    }
    private class MyTimer extends TimerTask{
         @Override
         public void run(){
             //Poll
             //Change value of response upon condition
         }
    }

我不希望服务返回任何值,直到“response”变量的值设置为“SUCCESS”。我该怎么做才能做到这一点?

2 个答案:

答案 0 :(得分:1)

您可采取的方法之一:

  1. 将您的请求分为两个请求
  2. 第一个请求将接受请求,并将发回202 Accepted response。 202 resposne将提供状态/轮询URL以轮询异步任务结果
  3. 第二个请求将轮询提供的状态/轮询网址。作为回应,您可以将响应返回200 OK,身体IN_PROGRESS或实际任务结果(如果已完成)。

答案 1 :(得分:0)

您可以使用其调用方法返回值的Callable。请查看Interface CompletionService&类ExecutorCompletionService。