Tengo algún método dentro de mi controlador que ejecuta @Async
tareaVolver @Async resultado del método en Spring MVC y devolverlo al cliente Ajax
@Async
public Future<String> getResultFromServer(){
String result = ......
return new AsyncResult<String>(result);
}
El tiempo de ejecución del método es de hasta 1o minutos. Todo lo que necesito hacer es solo devolver el resultado al lado del cliente que se conectará usando AJAX/JQuery.
No deseo que el cliente solicite mi servidor cada segundo si el método @Async
se ejecutó o no. Solo quiero mantener mi conexión abierta y luego simplemente enviar el resultado al servidor.
@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();
}
}
Entiendo que esto sea muy parecido al modelo de Comit, pero no estoy familiarizado con el cometa en general.
Mi pregunta es ¿cómo puedo mantener la conexión abierta en el lado del cliente usando JavaScript/JQuery?
y ¿mi método @RequestMapping(value="/async.do", method=RequestMethod.POST)
empujará el resultado al cliente?
¿Cómo resolvió esto/parte 2 eventualmente? – happybuddha