2013-10-09 3 views
0

У меня есть служба джерси, которая содержит задачу таймера, которая опросает определенное значение. Я хочу вернуть ответ только тогда, когда получаю определенное значение от опроса. есть ли способ, которым я могу это сделать?как вернуть определенный ответ в службу джерси

Мой код:

@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 
     } 
    } 

Я не хочу, чтобы служба не возвращает никакого значения, пока значение переменной «отклика» установлен сказать «SUCCESS». что я могу сделать для этого?

ответ

1

Одним из подхода вы можете взять с собой:

  1. Divide Ваш запрос на два запроса
  2. Первый запрос будет принять запрос и отправить обратно 202 Accepted ответ. 202 resposne предоставит URL статуса/опроса для опроса для результата задачи асинхронной работы
  3. Второй запрос будет опросить статус url. В ответ на это вы можете вернуть ответ как 200 OK с телом IN_PROGRESS или фактическим результатом задачи, если закончите.
0

Вы можете использовать Callable, чей метод вызова возвращает значение. Пожалуйста, ознакомьтесь с интерфейсом CompletionService & Класс ExecutorCompletionService.

Смежные вопросы