Возврат результата метода @Async в Spring MVC и возврат его клиенту Ajax

У меня есть метод внутри моего контроллера, который выполняет @Async задачу

@Async
public Future<String> getResultFromServer(){
    String result = ......
    return new AsyncResult<String>(result);
} 

Время выполнения метода достигает 1о минут. Все, что мне нужно сделать, это просто вернуть результат на сторону клиента, который будет подключен с помощью AJAX/JQuery.

Я не хочу, чтобы клиент запрашивал мой сервер каждую секунду, выполнился ли метод @Async или нет. Я просто хочу держать соединение открытым и затем просто "выталкивать" результат на сервер.

@RequestMapping(value="/async.do", method=RequestMethod.POST)
public void getResult(HttpServletResponse res){
    String result = null;
    PrintWriter out = res.getWriter();
    Future<String> future = getResultFromServer();
    try {
        if (future.isDone())
            result = future.get();
        out.println(result);
        out.close();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
}

Я понимаю, что это очень близко к модели Comit, но я не знаком с comet в целом.

Мой вопрос в том, как я могу держать соединение открытым на стороне клиента, используя JavaScript/JQuery?

и будет ли мой @RequestMapping(value="/async.do", method=RequestMethod.POST) метод выталкивать результат на клиента?

6
задан jeha 26 October 2011 в 18:37
поделиться