В чем разница между JMS / JAXM / JAX RPC / веб-службой / JAX-WS?
Я пытаюсь изучить различные веб-сервисы, чтобы понять, для чего они используются. Но я запутался, так как эти термины часто совпадают. Буду признателен, если кто-нибудь скажет мне кратко, в чем различия между этими терминологиями. Я сталкивался с некоторыми источниками, такими как http://java.sun.com/developer/Books/j2ee/jws/ch07.pdf, однако я не могу их четко различить.
1 ответ
Веб-служба: соответствующая стандартам вызываемая служба, может быть написана на Java, может быть написана с использованием другой технологии, например .NET
, Ключевым моментом является то, что существует стандартный язык WSDL, который описывает сервис. WSDL содержит информацию о транспорте, протоколе, в котором работает служба, доступных операциях и полезных нагрузках, перетекающих туда-сюда.
Большинство веб-служб, с которыми вы столкнетесь, используют сообщения SOAP (определенный формат XML) по протоколу HTTP, и поэтому WSDL будет содержать URL-адрес, где вызывать службу. В более общем случае возможны другие форматы сообщений и протоколы - мы вернемся к этому моменту позже.
Предположим, у вас есть WSDL для службы, которую вы хотите вызвать из Java-программы, тогда в принципе вы можете написать Java для форматирования подходящей полезной нагрузки XML и отправки сообщения по HTTP-соединению. Совершенно выполнимый, но очень утомительный, почти весь код является стандартным кодом, который может быть сгенерирован из WSDL.
Точно так же, если вы хотите создать веб-сервис на Java, вы можете начать с написания WSDL, но опять-таки есть много стандартного стандартного кода для чтения HTTP, синтаксического анализа XML и т. Д. Таким образом, в обоих случаях вы получаете преимущества от стандартных API Java для выполнения вся эта работа. Было несколько таких API, JAX/RPC и JAX/WS - два таких, и JAX/WS является более новым и более простым в использовании.
Альтернативной технологией интеграции является использование обмена сообщениями, есть много поставщиков, которые предоставляют продукты для организации очередей сообщений, поэтому вполне возможно отправлять сообщения из (скажем) Java в (скажем) C++, вам просто нужно согласовать формат сообщения (нет стандартного WSDL там тебе рассказать).
JMS - это API-интерфейс программирования Java, обеспечивающий абстракцию о продуктах обмена сообщениями конкретных поставщиков. Работая в Java, JMS обеспечивает переносимость между продуктами обмена сообщениями. Стандарт Java EE требует, чтобы поставщики Java EE App Server предоставляли инфраструктуру обмена сообщениями - я считаю, что по мере роста бизнес-систем им почти всегда требуются некоторые средства асинхронного обмена сообщениями.
Существуют различные возможности применения WSDL-подобных подходов к обмену сообщениями. Например, можно написать веб-сервис, используя SOAP/JMS, а не SOAP/HTTP. JAXM - это новый API в этой области. Честно говоря, мне неясно, как они связаны с SOAP/JMS и такими стандартами, как WS-ReliableMessaging.