У меня есть какой-то метод внутри моего контроллера, который выполняет @Async
задачу
@Async
public Future<String> getResultFromServer(){
String result = ......
return new AsyncResult<String>(result);
}
Время выполнения метода до 10 минут. Все, что мне нужно сделать, это просто вернуть результат на клиентскую сторону, которая будет подключена с помощью 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, но я не знаком с кометой вообще.
У меня вопрос: как я могу держать соединение открытым на стороне клиента, используя JavaScript / JQuery?
и мой метод @RequestMapping(value="/async.do", method=RequestMethod.POST)
передаст результат клиенту?