Подтвердить что ты не робот

Возможны ли асинхронные веб-службы RESTful?

Чтение RESTful, похоже, что невозможно реализовать асинхронный экземпляр, но кто-то может лучше узнать о SO.

Что я имею в виду здесь, я хотел бы выполнить асинхронные запросы службы:

@Path("/helloworld", asyncSupported=true)
public class MyHelloWorldService {
    ...
}

Я знаю, что asyncSupported не определен в @Path, но я ищу что-то похожее на @WebServlet. Затем я хотел бы использовать экземпляры AsyncContext (или что-то подобное).

Возможно ли это?

4b9b3361

Ответ 1

RestEasy имеет некоторую поддержку 1 для него - используя пользовательскую аннотацию под названием @Suspend.

Смотрите здесь: http://docs.jboss.org/resteasy/docs/2.2.1.GA/userguide/html/Asynchronous_HTTP_Request_Processing.html

Существует также фреймворк/библиотека поверх Джерси, называемая Atmosphere, однако это может быть излишним для вашего usecase, поскольку его фокус, как представляется, заключается в длительном опросе клиент-серверных веб-приложений (например, чаты - https://github.com/Atmosphere/atmosphere)

[1] Область CDI для вашего запроса будет потеряна в потоке, который фактически выполняет логику. См. RESTEasy-682 для получения дополнительной информации. Это проблема, которая не была решена никакими структурами REST, которые я знаю в данный момент [March 2014].

Ответ 2

По-видимому, возможно с CXF и Jetty Continuations, но это возможно только с Jetty 6; они были изменены в Jetty 7 на то, что в спецификации Servlet 3.0, и я не знаю, поддерживает ли это CXF. Более того, Jetty Continuations, по-видимому, немного беспорядочный API с большим количеством ручного материала, поэтому я не знаю, как легко конвертировать код.

Тем не менее, кажется несколько возможным. Со следующего ветра и когда Бог захочет.

Ответ 3

Относящаяся помощь по-прежнему находится в раннем возрасте. Но эту проблему следует рассматривать как 2 часть. Клиент и сервер.

Клиент:

Для клиентской стороны последние изменения в прошлом году стали достаточно зрелыми. И недавно неблокирующий клиент из Jeanfrancois Arcand был реализован и перенесен в репозиторий. Существует описание здесь.

Сервер:

Для серверной части она еще незрелая. Принятие новой спецификации сервлета довольно медленное, и я как разработчик ожидаю JSR 339 для решения этих проблем. И это также четко рассматривается в спецификации JSR с этими предложениями.

JAX-RS 1.1 определяет модель ответа синхронного запроса на сервере боковая сторона. В этом JSR указывается простая обработка асинхронного запроса такой, что ответ может быть возвращен асинхронно запрос. Servlet 3.0 может быть задействован для обеспечения такой поддержки, но реализации могут использовать другие API-интерфейсы, специфичные для конкретного контейнера вместо этого.

Однако есть и другие альтернативы. Такие проекты, как Jetty, рассматривают такие проблемы, как в этом примере. Я могу только предложить вам рассмотреть другие альтернативы, поскольку сообщество растет.

Ответ 4

Теперь вы можете создавать вызовы Asynchoronous RESTful с использованием JAX-RS 2.0 API, который является частью недавно выпущенного Java EE 7.0

http://www.slideshare.net/reza_rahman/jaxrs2?ref=

Ответ 5

Отъезд Pubsubhubbub нашел здесь для примера асинхронного протокола на основе REST. Он основан на формате Atom Syndication и намного проще, чем WS- * pub/sub механизмы.

Ответ 6

Вы также можете попробовать Spring Webflux, который одновременно является асинхронным и реактивным. Однако это не реализация JAX-RS из Java EE.