Изучаем Java EE 7 - [204]

Шрифт
Интервал

Создает объект типа JMSProducer, который может быть использован для конфигурации и отправки сообщений
JMSContext createContext(int sessionMode)Создает объект типа JMSContext с указанным режимом сеанса

JMSProducer

JMSProducer используется для отправки сообщений от имени JMSContext. Он предоставляет различные методы для отправки сообщения по указанному месту назначения. Экземпляр JMSProducer создается путем вызова метода JMSContext createProducer. Он также предоставляет методы, позволяющие настроить параметры отправки, свойства и заголовки сообщения (см. рис. 13.8) перед его отправкой. В табл. 13.5 приведено подмножество JMSProducer API.


Таблица 13.5. Подмножество JMSProducer API
СвойствоОписание
get/set[Type]PropertyУстанавливает и возвращает свойство сообщения, где [Type] — это тип свойства, который может быть Boolean, Byte, Double, Float, Int, Long, Object, Short, String
JMSProducer clearProperties()Очищает все установленные свойства
Set getPropertyNames()Возвращает неизменяемое представление всех имен свойств, для которых были заданы значения
boolean propertyExists(String name)Указывает, имеет ли свойство с заданным именем значение
get/set[Message Header]Устанавливает и возвращает заголовок сообщения, где [Message Header] может иметь тип DeliveryDelay, DeliveryMode, JMSCorrelationID, JMSReplyTo, JMSType, Priority, TimeToLive
JMSProducer send(Destination destination, Message message)Отправляет сообщение по указанному месту назначения, используя заданные параметры отправки, свойства и заголовки сообщения
JMSProducer send(Destination destination, String body)Отправляет сообщение типа TextMessage с определенным телом по определенному месту назначения

JMSConsumer

JMSConsumer используется для получения сообщений из очереди или темы. Он создается с помощью одного из методов JMSContext createConsumer, которому в качестве параметра передается очередь или тема. Как вы увидите позже, JMSConsumer может быть создан с селектора сообщения, чтобы он мог ограничивать доставляемые сообщения.

Клиент может получать сообщения синхронно или асинхронно по мере их поступления. Для асинхронной доставки клиент может зарегистрировать с помощью JMSConsumer объект MessageListener. По мере поступления сообщений поставщик доставляет их, вызывая метод OnMessage класса MessageListener. В табл. 13.6 приведено подмножество JMSConsumer API.


Таблица 13.6. Подмножество JMSConsumer API
СвойствоОписание
void close()Закрывает JMSConsumer
Message receive()Получает следующее созданное сообщение
Message receive(long timeout)Получает следующее сообщение, которое поступит в заданном временном интервале
T receiveBody(Class c)Получает следующее сообщение и возвращает его тело как объект указанного типа
Message receiveNoWait()Получает следующее сообщение, если оно доступно прямо сейчас
void setMessageListener(MessageListener listener)Устанавливает значение MessageListener
MessageListener getMessageListener()Получает значение MessageListener
String getMessageSelector()Получает значение селектора сообщений

Написание производителей сообщений

Новый упрощенный JMS API позволяет писать производителей и потребителей менее подробно, чем в случае классического API. Однако он все еще нуждается в обоих администрируемых объектах: ConnectionFactory и Destination. В зависимости от того, работаете вы за пределами или внутри контейнера (EJB, Web или ACC), вам придется использовать либо поиск JNDI, либо внедрение. Как вы видели ранее, API JMSContext является центральным API для производства и потребления сообщений. Если приложение работает за пределами контейнера, вам необходимо управлять жизненным циклом JMSContext (путем создания и закрытия его программно). Если вы работаете внутри контейнера, можете просто внедрить его и поручить контейнеру управлять его жизненным циклом.

Производство сообщения вне контейнера

Производитель сообщений (JMSProducer) является объектом, созданным JMSContext, и используется для отправки сообщений по месту назначения. Следующие шаги объясняют, как создать производителя, который посылает сообщение в очередь (листинг 13.4) вне какого-либо контейнера (в чистой среде Java SE).

1. Получить фабрики соединений и очереди с помощью поиска JNDI.

2. Создать объект JMSContext с помощью фабрики соединений (обратите внимание на утверждение try-with-resources, которое будет автоматически закрывать объект JMSContext).

3. Создать javax.jms.JMSProducer с помощью объекта JSMContext.

4. Отправить текстовое сообщение в очередь с помощью метода JMSProducer.send().


Листинг 13.4. Производитель класса выдал сообщение в очередь

>public class Producer {

>··public static void main(String[] args) {


>····try {

>······// Получение контекста JNDI

>······Context jndiContext = new InitialContext();

>·········// Выполняется поиск администрируемых объектов

>······ConnectionFactory connectionFactory = (ConnectionFactory) 

>························jndiContext.lookup("jms/javaee7/ConnectionFactory");

>······Destination queue = (Destination) jndiContext.lookup("jms/javaee7/Queue");


>······// Отправление текстового сообщения в очередь


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.