2013-10-09 91 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 
     } 
    } 

我不希望服務返回的任何值,直到「響應」變量的值設置爲說「成功」。我該怎麼做才能做到這一點?

回答

1

其中一個方法,你可以採取:

  1. 將您的請求轉換成兩個請求
  2. 首先請求將接受請求併發送回202接受響應。 202 resposne將提供狀態/輪詢URL來輪詢異步任務結果
  3. 第二個請求將輪詢所提供的狀態/輪詢URL。作爲響應,如果完成,您可以將響應返回爲200 OK與正文IN_PROGRESS或實際任務結果。
0

您可以使用其調用方法返回值的Callable。請參閱Interface CompletionService &類ExecutorCompletionService。