Mam pewne metody w moim kontrolera, który wykonuje @Async
zadaniePowrót @Async metoda wynik w Spring MVC i odesłać go do Ajax klienta
@Async
public Future<String> getResultFromServer(){
String result = ......
return new AsyncResult<String>(result);
}
Czas wykonywania metoda jest do 1o minut. Wszystko, co muszę zrobić, to po prostu zwrócić wynik do klienta, który będzie połączony za pomocą AJAX/JQuery.
Nie chcę, aby klient co sekundę prosił mój serwer o wykonanie metody @Async
. Chcę tylko, aby moje połączenie było otwarte, a następnie po prostu "wypchnij" wynik na serwer.
@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();
}
}
Rozumiem, że to bardzo zbliżone do modelu Comit, ale nie znam komety w ogóle.
Moje pytanie brzmi: jak mogę utrzymać połączenie otwarte po stronie klienta przy użyciu JavaScript/JQuery?
i czy moja metoda zostanie przekazana klientowi za pomocą metody @RequestMapping(value="/async.do", method=RequestMethod.POST)
?
Jak w końcu rozwiązałeś tę/część 2? – happybuddha