Изучаем Java EE 7 - [203]
>public class Consumer {
>··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");
>······// Создаются необходимые для подключения к очереди артефакты
>······Connection connection = connectionFactory.createConnection();
>······Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
>······MessageConsumer consumer = session.createConsumer(queue);
>······connection.start();
>······// Выполняется цикл получения сообщений
>······while (true) {
>········TextMessage message = (TextMessage) consumer.receive();
>········System.out.println("Сообщение получено: " + message.getText());
>······}
>····}··catch (NamingException | JMSException e) {
>······e.printStackTrace();
>····}
>··}
>}
Упрощенный API
Как видите, код, приведенный выше (см. листинги 13.2 и 13.3), довольно подробный и низкоуровневый. Вам нужно несколько артефактов, чтобы производить или потреблять сообщения (ConnectionFactory, Connection, Session…). Вдобавок вы должны обрабатывать исключение JMSException, которое является проверенным исключением (JMSException имеет несколько подклассов). Этот API был создан в JMS 1.1 в 2002 году и не изменялся до версии JMS 2.0.
JMS 2.0 вводит новый, упрощенный API, который состоит в основном из трех новых интерфейсов (JMSContext, JMSProducer и JMSConsumer). Они основаны на ConnectionFactory и других классических API, но не пользуются шаблонным кодом. Благодаря новому исключению JMSRuntimeException, которое является непроверенным, код отправления и получения сообщений стало гораздо проще писать и читать (взгляните на код следующих примеров).
На рис. 13.9 показана упрощенная диаграмма классов этого нового API. Обратите внимание, что устаревший, классический и упрощенный API находятся в пакете javax.jms.
Рис. 13.9. Упрощенный JMS API
Упрощенный API предоставляет ту же функциональность для обмена сообщениями, что и классический, но требует использования меньшего количества интерфейсов и в целом проще в использовании. Его основные интерфейсы:
• JMSContext — активное подключение к поставщику JMS и однопоточный контекст для отправки и получения сообщений;
• JMSProducer — объект, созданный JMSContext, который используется для отправки сообщений в очередь или тему;
• JMSConsumer — объект, созданный JMSContext, который применяется для приема сообщений, отправленных в очередь или тему.
JMSContext
JMSContext — это основной интерфейс упрощенного JMS API, введенный в JMS 2.0. Он сочетает в себе функциональность двух отдельных объектов классического API JMS 1.1: Connection (физическое соединение с поставщиком JMS) и Session (однопоточный контекст для отправки и получения сообщений).
JMSContext может быть создан приложением путем вызова одного из нескольких методов CreateContext фабрики соединений ConnectionFactory (см. листинг 13.1), а затем закрыт (то есть управляется приложением). Кроме того, если приложение работает в контейнере (EJB или Web), JMSContext может быть внедрен с помощью аннотации @Inject (управляется контейнером).
Когда приложению необходимо отправить сообщение, оно использует метод createProducer для создания JMSProducer, который предоставляет методы настройки и отправления сообщения. Сообщения могут быть отправлены либо синхронно, либо асинхронно. Для приема сообщений приложение может использовать один из нескольких методов createConsumer для создания объекта типа JMSConsumer. В табл. 13.4 приведено подмножество API JMSContext.
Свойство | Описание |
---|---|
void start() | Начинает (или повторяет) отправку приходящих сообщений |
void stop() | Временно приостанавливает доставку приходящих сообщений |
void close() | Закрывает JMSContext |
void commit() | Фиксирует все сообщения, отправляемые как транзакции, и высвобождает все блокировки |
void rollback() | Откатывает все сообщения, отправляемые как транзакции, и высвобождает все блокировки |
ByteMessage createByteMessage() | Создает объект типа ByteMessage |
MapMessage create MapMessage() | Создает объект типа MapMessage |
Message createMessage() | Создает объект типа Message |
ObjectMessage create ObjectMessage() | Создает объект типа ObjectMessage |
StreamMessage createStreamMessage() | Создает объект типа StreamMessage |
TextMessage createTextMessage() | Создает объект типа TextMessage |
TopicMessage createTopic(String topicName) | Создает объект типа Topic |
Queue createQueue(String queueName) | Создает объект типа Queue |
JMSConsumer createConsumer(Destination destination) | Создает объект типа JMSConsumer для указанного места назначения |
JMSConsumer createConsumer(Destination destination, String messageSelector) | Создает объект типа JMSConsumer для указанного места назначения с использованием селектора сообщений |
JMSProducer createProducer() |
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.