JMS-сеанс функционирует как фабрика JMS-сообщений. В спецификации JMS определяется логический формат сообщений, которые могут отправляться и приниматься JMS-провайдерами. Помните, что спецификация JMS определяет только интерфейсы, а не специфику реализации, так что физическое представление JMS-сообщения зависит от провайдера.
Вот элементы, из которых состоит JMS-сообщение.
• Заголовки.
Все сообщения поддерживают одинаковый набор заголовков сообщений. Поля заголовков содержат значения, которые используются клиентами и провайдерами для идентификации и маршрутизации сообщений.
• Свойства.
Каждое сообщение содержит встроенную возможность поддержки задаваемых в приложении значений свойств. Свойства являются эффективным механизмом фильтрации создаваемых приложениями сообщений.
• Тело.
В спецификации JMS определяется несколько типов тела сообщения. Логический формат JMS-сообщения показан на рис. 8.8.
В спецификации JMS определяется пять дочерних интерфейсов для сообщения. Эти интерфейсы позволяют помещать в тело сообщения данные разных типов. Интерфейсы JMS-сообщений показаны в табл. 8.5.
BytesMessage Поток неинтерпретируемых байтов. Данный тип предназначен для буквального кодирования тела, соответствующего существующему формату сообщения MapMessage Набор пар имя-значение, где имена представляют собой строки, а значения — элементарные типы Java. Доступ к этим элементам может осуществляться последовательно или случайным образом, по имени. Порядок элементов не определен ObjectMessage Сообщение, содержащее сериализуемый объект Java StreamMessage Поток значений, относящихся к элементарным типам Java. Записывается и читается последовательно TextMessage.
Сообщение, содержащее значение java.lang.String
Селекторы сообщений
Селектор JMS-сообщений позволяет JMS-клиенту выполнять фильтрацию сообщений в пункте назначения, чтобы получать только интересующие его сообщения. Селектор должен представлять собой строку, синтаксис которой основывается на части синтаксиса условных выражений SQL92. Однако выражение в селекторе сообщений может ссылаться только на заголовки и свойства сообщений, но не на значения, которые могут быть частью тела сообщения. Образец селектора сообщений дается в примере 8.4.
Пример 8.4. Образец селектора сообщений
JMSType=’car’ AND color=’blue’ AND weight>2500
Если получатель сообщений указывает при получении сообщений из пункта назначения селектор, то доставляются только те сообщения, заголовки и свойства которых соответствуют селектору. Если используемый пункт назначения представляет собой JMS-очередь, то сообщение остается в очереди. Если пунктом назначения является тема, то сообщения никогда не будут доставлены подписчику (с точки зрения подписчика такие сообщения не существуют).
За полным описанием селекторов сообщений и их синтаксиса обращайтесь, пожалуйста, к спецификации JMS. Ссылку на эту спецификацию можно найти в разделе 8.8, «Справочная информация и ресурсы».