Как выполнить асинхронные обратные вызовы с использованием веб-служб SOAP / REST с Java - PullRequest
2 голосов
/ 11 февраля 2011

У нас есть Java API, который должен быть дополнен уровнем веб-службы SOAP / REST.

Что требуется для реализации асинхронных вызовов через границы процессов / серверов с использованием
а) SOAP Webservices
б) RESTful веб-сервисы

Для некоторых методов может потребоваться несколько вызовов для ответа на запрос.

Мы будем использовать Java / J2ee для реализации службы SOAP / restful, используя такие библиотеки, как CXF или Axis или Jax-RS / WS.

Есть примеры? Попался?

Спасибо,

Ответы [ 7 ]

1 голос
/ 21 февраля 2011

@ Vivek

GET асинхронный, а другие методы HTTP - нет.

Это не такПожалуйста, продолжайте и читайте об AJAX: -)

1 голос
/ 20 февраля 2011

Async Http Client - это библиотека с открытым исходным кодом, специально разработанная для такого рода проблем. Он использует фьючерсы и включает в себя множество деталей и хлопот, связанных с асинхронными вызовами.

Автор имеет очень хорошее руководство по началу работы и существует активная группа обсуждения . Автор очень талантливый разработчик, и проект находится в постоянном развитии.

Из документации:

Библиотека использует неблокирующий ввод / вывод Java для поддержки асинхронного операции. По умолчанию асинхронный провайдер построен на основе Netty (http://www.jboss.org/netty), Ява Платформа NIO Client Server Socket Framework от JBoss, но библиотека выставляет настраиваемый SPI провайдера, который позволяет легко подключить другие рамки.

1 голос
/ 19 февраля 2011

Akka http://akka.io/

Отличная структура, отличная производительность - вот их претензии:

"" "

Простой параллелизм

Пишите проще правильнопараллельные приложения с использованием Actors, STM и Transactors.

Архитектура, управляемая событиями

Идеальная платформа для асинхронных архитектур, управляемых событиями. Никогда не блокируется.

True Scalability

Масштабирование на многоядерных или нескольких узлах с использованием асинхронной передачи сообщений.

Отказоустойчивость

Ошибка охвата. Напишите приложения, которые самостоятельно излечиваются с использованием иерархии супервизора Actor в стиле Erlang.

Прозрачное удаленное взаимодействие

Remote Actors предоставляет вам высокопроизводительную модель прозрачного распределенного программирования.

Scala & Java API

Scala и Java API, а также Spring иИнтеграция Guice. Разверните на своем сервере приложений или запустите автономный. "" "

1 голос
/ 17 февраля 2011

Ваш вопрос не ясен.Я интерпретирую ваш вопрос так, как вы хотите, чтобы ваш серверный код вызывал удаленные веб-службы REST в асинхронном режиме.Если это так, то лучше всего использовать функцию Futures в java.util.concurrent, она будет делать то, что вы хотите.Если моя интерпретация вопроса неверна, пожалуйста, уточните свой вопрос, где именно должны выполняться асинхронные операции.

0 голосов
/ 12 июня 2014

Реальный вопрос: почему вы хотите назвать это Async?Изучив решения для параллельной обработки на стороне Java EE, не рекомендуется создавать дочерние потоки внутри контейнера самостоятельно.

В вашем случае это выглядит следующим образом: 1. вы ищетесоздать контракт обертки в WSDL (REST или SOAP или оба), и если ваши клиенты не просто браузеры (AJAX) (я имею в виду, что у вас будут адоптеры со стороны сервера), то для JAX-WS -> вы можетесоздайте конечную точку @CallBack (http://docs.oracle.com/cd/E15051_01/wls/docs103/webserv_adv/callback.html) или
, если это конечная точка REST, требующая вызова от приемного устройства (на стороне сервера), используйте функцию jAX_RS 2.0

Примечание: вышепредполагается, что это точка-точка, но асинхронно

Вот несколько вариантов:

  1. , если вы хотите вызывать REST, SOAP или какую-либо другую функцию асинхронно, вы можете использоватьAPI-интерфейс workManager (JSR) или
  2. используют JMS и используют модель запрос-ответ, если вам это необходимо (кратковременный запуск), и одновременный вызов нескольких конечных точек
  3. использует WS-BPEL (только WSDLконечные точки) - этоТакже в стандарте OASIS
  4. используется SCA (любой компонент с любой технологией), который может содержать сборки компонента WS-BPEL (без сохранения состояния или с состоянием), работающие в BPEL-движке, такие как Apache ODE или сервер процессов IBM, и другие компоненты, а также совместная работа.Это стандарт
0 голосов
/ 05 мая 2013

Один из лучших способов реализовать асинхронные операции - использовать обратные вызовы.Для API REST разработка API и клиент Rest должны это поддерживать.Например, клиентский класс должен передавать себя или свой внутренний класс как listner.API остальных на стороне сервера должен поддерживать идентификатор запроса и перезванивать слушателя на карте.После завершения обработки он может вызывать метод для прослушивателя на основе идентификатора запроса из карты.

0 голосов
/ 17 февраля 2011

Для веб-сервисов REST (кроме GET) все остальное (POST / PUT ..) - Async, оно возвращает код состояния HTTP операции.

Если вы хотите, чтобы GET также был асинхронным,вам придется использовать потоки, мы делали это однажды в среде Spring, используя аннотацию @Async (которая внутренне порождает поток).

Из get верните URL обратного вызова в качестве ответа и используйте потоки для асинхронной обработки запроса.

Кроме того, для SOAP / REST, как только вы получите запрос, вы можете опубликовать его вОчередь JMS для службы Async.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...