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

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

Примеры реализации

Open Message Queue (OpenMQ) — это эталонная реализация JMS. Она имела открытый исходный код с 2006 года и может быть использована в автономных приложениях JMS или встроена в сервер приложений. OpenMQ является поставщиком сообщений по умолчанию для GlassFish. Она также добавляет много нестандартных функций, таких как универсальная служба обмена сообщениями (UMS), шаблонные места хранения тем, проверка сообщений XML, кластеризация и многое другое.

Java Messaging Service API

JMS является стандартным API Java, который позволяет приложениям создавать, отправлять, получать и читать сообщения асинхронно. Он определяет общий набор интерфейсов и классов, которые позволяют программам общаться с другими поставщиками сообщений. JMS аналогичен JDBC: последний соединяется с несколькими базами данных (Derby, MySQL, Oracle, DB2 и др.), а JMS — с несколькими поставщиками (OpenMQ, MQSeries, SonicMQ и т. д.).

JMS API развивался с момента своего создания. По историческим причинам JMS предлагает три альтернативных набора интерфейсов для производства и потребления сообщений. Эти очень разные интерфейсы развивались в версиях JMS 1.0, 1.1 и 2.0 и являются устаревшим, классическим и упрощенным API.

JMS 1.0 провел четкое различие между моделями «от точки к точке» и «публикация-подписка». Были определены два доменно-ориентированных API, один для модели «от точки к точке» (очереди) и другой — для модели «публикация-подписка» (темы). Вот почему вы можете найти, например, QueueConnectionFactory и TopicConnectionFactory API вместо стандартного ConnectionFactory. Обратите также внимание на разную лексику: потребитель вызывает получателя в модели P2P и подписчика в модели pub-sub.

JMS 1.1 API (называемый классическим API) предоставил единый набор интерфейсов, который можно использовать как для P2P, так и для модели pub-sub. В табл. 13.1 приведены общие имена интерфейсов (например, Session) и устаревшие имена для каждой модели (QueueSession, TopicSession).


Таблица 13.1. Интерфейсы в зависимости от версии JMS
Классический APIУпрощенный APIУстаревший API (P2P)Устаревший API (pub-sub)
ConnectionFactoryConnectionFactoryQueueConnectionFactoryTopicConnectionFactory
ConnectionJMSContextQueueConnectionTopicConnection
SessionJMSContextQueueSessionTopicSession
DestinationDestinationQueueTopic
MessageMessageMessageMessage
MessageConsumerJMSConsumerQueueReceiverTopicSubscriber
MessageProducerJMSProducerQueueSenderTopicPublisher
JMSExceptionJMSRuntimeExceptionJMSExceptionJMSException

Однако JMS 1.1 все еще был многословным и низкоуровневым API по сравнению с JPA или EJB. JMS 2.0 предоставил упрощенный API, который предлагает все функции классического API, но требует меньшего количества интерфейсов, а также проще в использовании. Выше (см. табл. 13.1) подчеркнуты различия между этими API (все они расположены в пакете javax.jms).

Я не буду обсуждать устаревшие API, но следует представить классический API, во-первых, потому, что вы увидите миллионы строк кода с использованием классического API JMS 1.1, во-вторых, потому, что технически упрощенный API опирается на классический.

Классический API

Классический API JMS предоставляет классы и интерфейсы для приложений, требующих наличия системы обмена сообщениями (рис. 13.7). Он позволяет выполнять асинхронный обмен данными между клиентами, обеспечивая соединение с поставщиком и сеанс, в котором сообщения могут быть созданы, отправлены или получены. Эти сообщения могут содержать текст или другие объекты различного вида.


Рис. 13.7. Классический API JMS

ConnectionFactory

Фабрики соединений являются администрируемыми объектами, которые позволяют приложению соединяться с поставщиком путем программного создания объекта Connection. javax.jms.ConnectionFactory — это интерфейс, инкапсулирующий параметры конфигурации, которые были определены администратором.

Для использования администрируемых объектов, таких как ConnectionFactory, клиент должен выполнить поиск JNDI (или использовать внедрение). Например, следующий фрагмент кода получает объект JNDI InitialContext и использует его для поиска объекта типа ConnectionFactory под именем JNDI:

>Context ctx = new InitialContext();

>ConnectionFactory ConnectionFactory =

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

Методы, доступные в этом интерфейсе (листинг 13.1), — createConnection, которые возвращают объект Connection, и createContext, появившиеся в JMS 2.0, возвращающие объект JMSContext. Вы можете создать объект типа Connection или JMSContext с помощью идентификатора пользователя по умолчанию или указания имени пользователя и пароля.


Листинг 13.1. Интерфейс ConnectionFactory

>public interface ConnectionFactory {

>··Connection createConnection() throws JMSException;

>··Connection createConnection(String userName, String password) throws JMSException;

>··JMSContext createContext();

>··JMSContext createContext(String userName, String password);

>··JMSContext createContext(String userName, String password, int sessionMode);

>··JMSContext createContext(int sessionMode);


Рекомендуем почитать
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 так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.