Я пытаюсь использовать длинный опрос с JAX-RS (реализация Джерси), и это не работает, как я ожидаю. Может быть, я что-то неправильно понимаю. Буду признателен за любые советы.
Обратите внимание, что использование обратного подключения (что-то вроде Atmosphere, Comet и т. д.) не является вариантом из соображений безопасности. Не то чтобы я сейчас разрабатываю Tomcat 7.
Следующий метод вызывается из вызова JQuery Ajax (с использованием $.ajax
).
@Path("/poll")
@GET
public void poll(@Suspended final AsyncResponse asyncResponse)
throws InterruptedException {
new Thread(new Runnable() {
@Override
public void run() {
this.asyncResponse = asyncResponse;
// wait max. 30 seconds using a CountDownLatch
latch.await(getTimeout(), TimeUnit.SECONDS);
}
}).start();
}
Другой метод вызывается из моего приложения (после вызова JMS):
@POST
@Path("/printed")
public Response printCallback() {
// ...
// I expect the /poll call to be ended here from the client perspective but that is not the case
asyncResponse.resume("UPDATE");
latch.countDown();
return Response.ok().build();
}
Если я удалю создание потока в методе poll
. Тогда это работает, но проблема в том, что поток занят. Если я использую создание потока, то метод возвращается напрямую, и браузер не обнаруживает конец длинного опроса.
Что я делаю неправильно?