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

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


Листинг 13.17. ExpensiveOrderMDB, потребляющий только заказы на сумму более $1000

>@MessageDriven(mappedName = "jms/javaee7/Topic", activationConfig = {

>········@ActivationConfigProperty(propertyName··= "acknowledgeMode", 

>··································propertyValue = "Auto-acknowledge"), 

>········@ActivationConfigProperty(propertyName··= "messageSelector", 

>··································propertyValue = "orderAmount > 1000")

>})

>public class ExpensiveOrderMDB implements MessageListener {


>··public void onMessage(Message message) {

>····try {

>······OrderDTO order = message.getBody(OrderDTO.class);

>······System.out.println("Большой заказ получен: " + order.toString());

>····}··catch (JMSException e) {

>······e.printStackTrace();

>····}

>··}

>}

Компиляция и упаковка с помощью Maven

ExpensiveOrderMDB и OrderDTO должны быть упакованы в один файл с расширением. jar, чтобы в дальнейшем быть развернутыми на GlassFish. MDB использует аннотации из пакета EJB (@MessageDriven) и JMS API (ConnectionFactory, Destination и т. д.), поэтому файл pom.xml, показанный в листинге 13.18, использует зависимость glassfish-embedded-all (которая содержит все API Java EE 7). Эта зависимость имеет область действия provided, поскольку GlassFish, как контейнер EJB и поставщик JMS, предоставляет эти API во время выполнения. Maven должен знать, что вы используете Java SE 7, в результате конфигурирования надстройки maven-compiler-plugin.


Листинг 13.18. Файл pom.xml, предназначенный для создания и упаковки MDB

>

>

>·········xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance" 

>·········xsi: schemaLocation="http://maven.apache.org/POM/4.0.0 

>·········http://maven.apache.org/xsd/maven-4.0.0.xsd" >

>··4.0.0


>··

>····chapter13

>····org.agoncal.book.javaee7

>····1.0

>··


>··org.agoncal.book.javaee7.chapter13

>··chapter13-mdb

>··1.0


>··

>····

>······org.glassfish.main.extras

>······glassfish-embedded-all

>······4.0

>······provided

>····

>··


>··

>····

>······

>········org.apache.maven.plugins

>········maven-compiler-plugin

>········2.5.1

>········

>··········1.7

>··········1.7

>········

>······

>····

>··

>

Для компиляции и упаковки классов откройте интерпретатор командной строки в каталоге, содержащем файл pom.xml, и введите следующую команду Maven:

>$mvn package

Перейдите в директорию target, где вы должны увидеть файл chapter13-MDB-1.0.jar. Открыв его, вы увидите, что он содержит файл класса для классов ExpensiveOrderMDB и OrderDTO.

Создание администрируемых объектов

Администрируемые объекты, необходимые для отправки и получения сообщений, должны быть созданы в поставщике JMS. Каждый из них имеет имя JNDI, что позволяет клиентам получить ссылку на объект через поиск JNDI:

• фабрика соединений называется jms/javaee7/ConnectionFactory;

• тема называется jms/javaee7/Topic.

Эти объекты создаются административно, поэтому GlassFish должен быть запущен и работать во время создания. Убедившись, что командная строка asadmin находится в вашем каталоге, выполните следующую команду в консоли:

>$ asadmin create-jms-resource — restype javax.jms.ConnectionFactory 

>········································jms/javaee7/ConnectionFactory

>$ asadmin create-jms-resource — restype javax.jms.Topic jms/javaee7/Topic

Веб-консоль GlassFish может использоваться для создания фабрики соединений и очереди. Однако, по моему опыту, самый простой и быстрый способ управлять GlassFish — использовать сценарий asadmin. Задействуйте другую команду, чтобы перечислить все JMS-ресурсы и обеспечить успешное создание администрируемых объектов:

>$ asadmin list-jms-resources

>jms/javaee7/Topic

>jms/javaee7/ConnectionFactory

Начиная с версии JMS 2.0, существует программный способ объявить администрируемые объекты. Идея состоит в том, чтобы аннотировать любой управляемый компонент (управляемый компонент, EJB, MDB…) аннотациями @JMSConnectionFactoryDefinition и @JMSDestinationDefinition, развернуть компонент, и контейнер гарантированно создаст фабрику соединений и место назначения. Этот механизм подобен изученному вами ранее (см. главу 8, листинг 8.15), где описывалась аннотация @DataSourceDefinition. В листинге 13.19 показан класс ExpensiveOrderMDB с двумя аннотациями определения.


Листинг 13.19. ExpensiveOrderMDB, определяющий администрируемые объекты программно

>@JMSConnectionFactoryDefinition(name = "jms/javaee7/ConnectionFactory",

>···························className = "javax.jms.ConnectionFactory")

>@JMSDestinationDefinition(name = "jms/javaee7/Topic",

>·····················className = "javax.jms.Topic")

>public class ExpensiveOrderMDB implements MessageListener {…}


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