В среде исполнения JMS-клиентам необходим механизм для получения ссылок на сконфигурированные администрируемые объекты JMS. В спецификации JMS устанавливается соглашение, что такие ссылки получаются путем поиска их в пространстве имен с помощью программного интерфейса JNDI (Java Naming and Directory Interface™).
В спецификации JMS не определяется политика имен, которая обозначала бы, где в пространстве имен следует размещать ресурсы, связанные с обменом сообщениями. Однако если JMS-клиентом является приложение J2EE, то в спецификации J2EE рекомендуется размещать ресурсы, связанные с обменом сообщений, в подконтекст JMS.
Администраторам необходимы дополнительные инструменты для создания и связывания администрируемых объектов в пространстве имен JNDI. Спецификация JMS возлагает ответственность за предоставление таких инструментов на JMS-провайдера. Инструменты, которые предлагаются для этой цели в WebSphere Application Server, обсуждаются в разделах 8.5, «Управление JMS-провайдерами WebSphere» и 8.6, «Конфигурирование администрируемых объектов JMS».
Ссылки J2EE и JMS
Дополнительным моментом данного обсуждения является то, что клиентскому JMSприложению необходимо знать, в каком месте пространства имен JNDI помещен администрируемый объект JMS, чтобы иметь возможность найти его в период работы. Этим требованием создается зависимость между кодом JMS-клиента и топологией среды исполнения. Если администрируемый объект JMS перемещен в пределах пространства имен JNDI, то клиентское JMS-приложение нужно будет изменить. Это, очевидно, является неприемлемым.
В спецификации J2EE предлагаются различные механизмы именования, которые вы можете использовать, чтобы разорвать связь между кодом клиента JMS и реальными именами JNDI, с которыми связываются администрируемые объекты JMS. Для фабрики соединений JMS используйте Resource Manager Connection Factory Reference. Для пункта назначения JMS используйте Resource Environment Reference. Эти ссылки определены в дескрипторе развертывания компонента J2EE. Обращайтесь к главе 5, «Naming» версии 1.4 спецификации J2EE, где можно найти дополнительную информацию об этих ссылках.
Определение любой из этих ссылок в компоненте J2EE приведет к тому, что в локальном пространстве имен JNDI данного компонента в среде выполнения будет создана запись JNDI. Вы можете обращаться к этому локальному пространству имен JNDI из JMS-клиента, выполняя поиск в JNDI имен, начинающихся с java:comp/env.
Эти ссылки привязываются администратором к реальным администрируемым объектам JMS в глобальном пространстве имен JNDI, когда приложение размещается в целевой рабочей среде. Когда во время выполнения JMS-клиент выполняет поиск в своем локальном пространстве имен JNDI, его переправляют на администрируемый объект JMS в глобальном пространстве имен.
Следовательно, если администрируемый объект JMS перемещается внутри пространства имен JNDI, необходимо модифицировать только связь ссылки на ресурс. Код JMS-приложения клиента изменять не нужно.
Извлечение администрируемых объектов из JNDI
Код, который нужно написать, чтобы получить ссылки на объекты ConnectionFactory и Destination, показан в примере 8.1.
Пример 8.1. Использование JNDI для извлечения администрируемых объектов JMS
import javax.jms.*;
import javax.naming.*
// Создание исходного контекста JNDI
InitialContext initCtx = new InitialContext();
// Получение фабрики соединений ConnectionFactory connFactory
= (ConnectionFactory)initCtx.lookup("java:comp/env/jms/myCF");
// Получение пункта назначения, используемого при отправке сообщений Destination destination
= (Destination)initCtx.lookup("java:comp/env/jms/myQueue");