Изучаем Java EE 7 - [201]
>}
Место назначения
Место назначения — это администрируемый объект, содержащий информацию о конфигурации конкретного поставщика, такую как адрес места назначения. Эта конфигурация скрыта от клиента JMS с помощью стандартного интерфейса javax.jms.Destination. Как и в случае с фабрикой соединений, для возврата таких объектов требуется выполнить поиск JNDI:
>Context ctx = new InitialContext();
>Destination queue = (Destination) ctx.lookup("jms/javaee7/Queue");
Соединение
Объект типа Javax.jms.Connection, который вы создаете, используя метод createConnection() фабрики соединений, инкапсулирует соединение с провайдером JMS. Подключения являются потокобезопасными и разработаны разделяемыми, поскольку открытие нового соединения требует значительного количества ресурсов. Тем не менее сеанс (javax.jms.Session) обеспечивает однопоточный контекст для отправки и получения сообщений, используя подключение для создания одного или нескольких сеансов. Если у вас есть фабрика соединений, вы можете использовать ее для создания соединения следующим образом:
>Connection connection = connectionFactory.createConnection();
Перед тем как адресат сможет получить сообщения, он должен вызвать метод start(). Если вам нужно временно остановить получение сообщений, закрывать соединение не требуется — вы можете вызвать метод stop():
>connection.start();
>connection.stop();
Когда приложение завершается, необходимо закрыть все созданные соединения. Закрытие соединения закрывает все его сеансы, а также производителей и потребителей:
>connection.close();
Сеанс
Вы создаете сеанс из соединения с использованием метода createSession(). Сеанс предоставляет транзакционный контекст, в котором набор сообщений, которые будут отправлены или получены, сгруппирован в атомарную единицу работы. Это означает, что, если вы отправите несколько сообщений в течение одного сеанса, JMS гарантирует, что все они будут отправлены либо не будет отправлено ни одного. Такое поведение устанавливается при создании сеанса:
>Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
Первый параметр метода определяет, будет ли сеанс поддерживать транзакции. В данном примере параметр имеет значение true, а это означает, что запрос на отправку сообщений не будет выполнен либо до вызова метода commit(), либо до закрытия сеанса. Если бы значение параметра было false, сеанс не был бы транзакционным — сообщения будут отправляться по вызову метода send(). Второй параметр означает, что сеанс автоматически подтверждает сообщения, если они были получены успешно. Сеанс имеет один поток и используется для создания сообщений, производителей и потребителей.
Сообщения
Для общения клиенты обмениваются сообщениями; производитель шлет сообщение к месту назначения, а потребитель получает его. Сообщения представляют собой объекты, которые инкапсулируют информацию и состоят из трех частей (рис. 13.8):
• заголовок — содержит стандартную информацию для идентификации и маршрутизации сообщений;
• свойства — пары «имя/значение», которые приложение может установить или считать; свойства также позволяют месту назначения фильтровать сообщения на основе их значений;
• тело — фактически содержит сообщение и может иметь один из нескольких форматов (текст, байты, объект и т. д.).
Заголовок
Заголовок имеет предопределенные пары «имя/значение», общие для всех сообщений, которые клиенты и поставщики используют для идентификации и маршрутизации сообщений. Они могут рассматриваться в качестве метаданных сообщения, поскольку дают информацию о нем. Каждое поле связано с геттером и сеттером, определенным в интерфейсе javax.jms.Message. Некоторые поля заголовка предусматривают задание значений клиентом, но многие из них устанавливаются автоматически с помощью методов send() и publish(). В табл. 13.2 описаны все поля заголовков сообщений JMS.
Рис. 13.8. Структура сообщения JMS
Поле | Описание | Устанавливается |
---|---|---|
JMSDestination | Указывает место назначения, по которому было отправлено сообщение | Методами send() или publish() |
JMSDeliveryMode | JMS поддерживает два режима доставки сообщений. PERSISTENT указывает поставщику убедиться, что сообщение не потерялось при передаче из-за ошибки. NON_ PERSISTENT — это режим с наименьшими накладными расходами, поскольку требует хранить сообщение в постоянном хранилище | Методами send() или publish() |
JMSMessageID | Предоставляет значение, которое уникально идентифицирует каждое сообщение, отправленное поставщиком | Методами send() или publish() |
JMSTimestamp | Содержит время, в которое сообщение поступило поставщику | Методами send() или publish() |
JMSCorrelationID | Клиент может использовать его, чтобы связать одно сообщение с другим, например связать ответное сообщение с сообщением-запросом | Клиентом |
JMSReplyTo | Содержит место назначения, по которому должно быть отправлено сообщение-ответ | Клиентом |
JMSRedelivered | Это двоичное значение устанавливается поставщиком чтобы указать, что сообщение должно быть доставлено повторно | Поставщиком |
JMSType | Это поле идентифицирует тип сообщения | Клиентом |
JMSExpiration | Когда сообщение отправляется, время его существования рассчитывается и устанавливается на основе указанного времени существования в методе send() |
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.