JMS API - это, по сути, клиентский API. Он определяет API, который клиент будет использовать для взаимодействия с брокером. Как брокер реализован, является совершенно произвольным, если поведение реализации соответствует спецификации JMS. Это дает тем, кто внедряет брокера JMS, широкую свободу в реализации его в соответствии с их собственными требованиями и ограничениями. Это также означает, что создание и настройка экземпляра брокера (каким бы брокером он ни был) не определяется JMS API.
Более того, спецификация JMS устанавливает соглашение , что клиенты могут найти свои «административные объекты» (т.е. фабрики соединений и места назначения) в JNDI. В разделе 5.1 спецификации JMS 2 говорится:
Хотя интерфейсы для администрируемых объектов явно не зависят от JNDI, JMS устанавливает соглашение, согласно которому клиенты JMS находят их, просматривая их в пространстве имен с помощью JNDI.
Из-за этого соглашения большинство поставщиков JMS также предоставляют реализацию JNDI для использования вместе с реализацией JMS. ActiveMQ предоставляет это через класс org.apache.activemq.jndi.ActiveMQInitialContextFactory
. Использование и конфигурация этой реализации JNDI обсуждается далее в документации ActiveMQ .
Поскольку использование JNDI - это всего лишь соглашение , большинство поставщиков JMS имеют альтернативные способы доступа к объектам администрирования. . Например, ActiveMQ позволяет программно создать экземпляр фабрики соединений или назначения с использованием классов c, специфичных для ActiveMQ.
Чтобы подключить клиент JMS к соответствующему брокеру, вам сначала нужно решить, хотите ли вы использовать JNDI или c механизм, определяемый провайдером. Вообще говоря, JNDI является предпочтительным методом, поскольку он является подключаемым (с использованием свойств, определенных в файле jndi.properties
в пути к классам приложения), что упрощает переключение между брокерами JMS при необходимости. Как только это решение будет принято, вы приобретете экземпляр javax.jms.ConnectionFactory
и используете его для создания javax.jms.Connection
, et c. Существует множество руководств и документации о том, как писать клиенты JMS после этого момента.
В конечном итоге нет строгой необходимости использовать что-либо, кроме API-интерфейсов JMS и JNDI в ваших клиентских приложениях при подключении к ActiveMQ.