Несмотря на множество исследований в Интернете, я не могу найти решение моей проблемы. Я бы хотел позвонить службе из графического интерфейса. Услуга (метод Rest) запускает асинхронную обработку с помощью потока. Я хочу, чтобы служба немедленно дала ответ на графический интерфейс, чтобы графический интерфейс не был заблокирован. В конце потока служба должна дать второй ответ, указав GUI, что обработка завершена.Невозможно получить асинхронный ответ с reasteasy
Что я хочу сделать, похоже, соответствует асинхронной HTTP-части Reasteasy. Итак, я попробовал этот код (я позволяю только важные детали для моей проблемы):
@PUT
@Path("/duplicate/1")
public void duplicate( UcModel uc,
final @Suspend(TIMEOUT_ASYNCHRONOUS_DUPLICATION) AsynchronousResponse response) throws BusinessException {
Thread t = new Thread() {
@Override
public void run() {
try {
Thread.sleep(40000);
} catch (InterruptedException e) {
}
Response jaxrs = Response.ok(result).build();
response.setResponse(jaxrs);
}
};
t.start();
}
}
В моем web.xml, я поместил этот код:
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServlet30Dispatcher
</servlet-class>
<async-supported>true</async-supported>
</servlet>
Проблемы : веб-служба не дает ответ немедленно. Он дает ответ только в конце потока, и графический интерфейс блокируется. Просмотрев код, я даже не понимаю, как служба может сразу дать ответ с результатом «void».
Для информации: вызов веб-службы выполнен в ExtJS, структуре JavaScript. Он выполняет запрос Ajax.
Было бы здорово, если бы кто-то помог мне с этой проблемой. Заранее спасибо
Седрик
Спасибо за ваш ответ. К сожалению, у меня не будет достаточно времени, чтобы попробовать это решение, потому что сегодня я покидаю свой проект. Итак, моим обходным решением будет полностью удалить асинхронную часть моего метода и обеспечить, чтобы клиент не блокировался запросом на обработку. Я даю свой ответ моим коллегам, может быть, у кого-то будет один день, чтобы посмотреть на него и попробовать решение кометы – user2622053
хорошо, удачи и, пожалуйста, не забудьте проголосовать, если ответ был полезен для вас –
Я пробовал голосовать, но я новичок на этом форуме, поэтому у меня недостаточно репутации для голосования – user2622053