Обзор

Что такое JMS?

JMS (сокращение от Java Messaging System) это интерфейсы к объектам ориентированный на работу через сообщения (Message-Oriented Middleware - MOM), этот API разработан фирмой Sun пару лет назад. Основным мотивом для создании этих интерфейсов было создание обобщенного Java API для приложений ориентированных на работу с сообщениями (message-oriented application programming) и предотвращение использования специализированных зависимых от производителей API. Ваша программа работает с API, но во время выполнения ей понадобится определённая реализация этих интерфейсов JMS, называемая провайдером JMS, эта реализация создается независимым производителем. Существует несколько разных провайдеров JMS; тот, который используется в JBoss называется JBossMQ.

JMS удобно использовать когда несколько (или все) из следующих требований предъявляются к проекту:

  • Распределенная система

  • Асинхронная работа

  • Семантика один-ко-многим, многие-ко-многим или многие к одному

  • Гарантированная доставка

JMS и J2EE

JMS была разработана раньше спецификации Enterprise Java Beans (EJBs) и раньше чем была разработана Java 2 Enterprise Edition (J2EE). Поэтому не удивительно, что в спецификации JMS нет ни слова про EJB или J2EE.

В первых версиях спецификаций EJB и J2EE также не было упоминания о JMS. Включительно до EJB версии 1.1, JMS не было необходимым API, которое провайдер должен сделать доступным для объектов. В J2EE 1.2 было требование, заключавшееся в том, что интерфейсы JMS должны быть доступны, но не было требования о включении в контейнер JMS провайдера; в результате, не было гарантии что вы сможете использовать JMS в вашем коде.

Эта ситуация изменилась в EJB 2.0 и J2EE 1.3. Совместимый с J2EE 1.3 сервер должен включать в себя провайдера JMS. Так как J2EE 1.3 также требует EJB 2.0, две дополнительных JMS-возможности:

  • Был определён новый тип объектов. Называемый Message Driven Bean -MDB (объекты управляемые сообщениями), этот тип объектов выступает в роли подписчика JMS (subscriber), тем самым были введены асинхронные вызовы EJB.

  • Трактовка JMS в качестве ресурса. Для согласованности, публикация (отправка) JMS из объекта должна быть внутри глобальной транзакции этого объекта. Поэтому от JMS требуется быть контейнеро-управляемым ресурсом, больше похожим на соединение JDBC. По этому сценарию транзакция JMS сессии будет управляться контейнером и сессия будет обрабатываться также как любой другой транзакционный ресурс, к которому вы получаете доступ из того же метода.

JMS и JBoss

JBoss поддерживает JMS начиная с версии 2.0. Поддержка Message Driven Beans была добавлена в версию 2.1, а JMS в качестве транзакционного ресурса стало доступно в версии 2.4.

Архитектура JMS в JBoss включает в себя следующие элементы:

  • Провайдер JMS. Его зовут JBossMQ, это часть JBoss, которая реализует спецификацию JMS 1.0.2, включая дополнительные части, такие как Application Service Facility (ASF) в Главе 8. JBossMQ обрабатывает всё, что необходимо делать с обычным JMS: создание очередей или топиков, сохранение и производительность.

    JBossMQ был создан Norbert Lataille весной 2000 года. В разработке также участвовали Hiram Chirino, Paul Kendall и David Maplesden.

    JBossMQ ведётся в отдельном модуле CVS и имеет собственный список рассылки, spyderMQ, где общаются программисты JBossMQ.

  • Message Driven Beans. Эти объекты являются частью ядра JBoss и они полностью совместимы со спецификацией. Peter Antman первоначально написал их, но Hiram Chirino и Jason Dillon (включая других) также внесли большое число изменений.

  • Адаптер ресурсов. В JBoss 2.4, Peter Antman добавил адаптер ресурсов JMS спроектированный как J2EE Connector. Этот адаптер должен использоватья для всех не-асинхронных задач JMS из объектов EJB в JBoss.

Перевод: Антон Мелехин

Наши друзья