Изучаем Java EE 7 - [213]
>@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.
>
>
>·········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" >
>··
>··
>····
>····
>····
>··
>··
>··
>··
>··
>····
>······
>······
>······
>······
>····
>··
>··
>····
>······
>········
>········
>········
>········
>··········
>··········
>········
>······
>····
>··
>
Для компиляции и упаковки классов откройте интерпретатор командной строки в каталоге, содержащем файл 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 с двумя аннотациями определения.
>@JMSConnectionFactoryDefinition(name = "jms/javaee7/ConnectionFactory",
>···························className = "javax.jms.ConnectionFactory")
>@JMSDestinationDefinition(name = "jms/javaee7/Topic",
>·····················className = "javax.jms.Topic")
>public class ExpensiveOrderMDB implements MessageListener {…}
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.