JMS 2.0 (часть платформы Java EE 7) представила множество приятных функций . Одним из них была возможность объявлять ресурсы JMS для автоматического развертывания.
Pre Java EE 7
- Внедрить фабрику соединений с помощью @Resource
- Поиск назначения (очередь / тема) с использованием @Resource
- Вытащите объект Session и используйте его для создания Message, Message Producer и отправьте сообщение
Самое главное, вы должны были убедиться, что ресурсы, т. Е. Фабрика соединений и физические места назначения, были заранее настроены на сервере приложений
В эпоху Java EE 7…
Вы можете использовать вкусности JMS 2.0
- Используйте внедренный JMS-контекст (в большинстве случаев), чтобы упростить процесс отправки с меньшим количеством стандартного кода
- Самое главное, что вы можете декларативно настроить автоматическое предоставление ресурсов JMS с помощью аннотаций или дескрипторов развертывания.
Давайте посмотрим на новые аннотации JMS 2.0 в действии. Вы также можете выбрать этот проект Maven на Github и развернуть его в своей любимой среде IDE.
@JMSConnectionFactoryDefinition, @JMSConnectionFactoryDefinitions
Используется для объявления одной или нескольких фабрик соединений
@JMSDestinationDefinition, @JMSDestinationDefinitions
Используется для объявления одного или нескольких физических назначений (очередей или тем)
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
@Stateless@JMSConnectionFactoryDefinition(name = "java:comp/env/AutoDeloyedJMSConf")@JMSDestinationDefinition(interfaceName = "javax.jms.Queue", name = "java:comp/env/AutoDeloyedJMSQueue")public class Service { //usage omitted...}@JMSConnectionFactoryDefinitions({ @JMSConnectionFactoryDefinition( name="java:comp/env/AutoDeloyedJMSConf1" ), @JMSConnectionFactoryDefinition( name="java:comp/env/AutoDeloyedJMSConf2" ) })@JMSDestinationDefinitions({ @JMSDestinationDefinition( name="java:comp/env/AutoDeloyedJMSQueue1", interfaceName = "javax.jms.Queue", ), @JMSDestinationDefinition( name="java:comp/env/AutoDeloyedJMSQueue2", interfaceName = "javax.jms.Queue", ) })@Statelesspublic class AnotherService { //usage omitted...} |
Ох, и вы также можете использовать XML
|
01
02
03
04
05
06
07
08
09
10
|
//snippet only..<jms-connection-factory> <name>java:comp/env/AutoDeloyedJMSConf3</name></jms-connection-factory><jms-destination> <name>java:comp/env/AutoDeloyedJMSQueue3</name> <interfaceName>javax.jms.Queue</interfaceName></jms-destination> |
Они могут быть частью дескриптора веб-развертывания (web.xml) или дескриптора развертывания EJB (ejb-jar.xml)
Возможные варианты
Есть несколько способов использовать эту функцию
- Объявите свои JMS-ресурсы, используя @Singleton EJB на основе @Startup
- Вы также можете объявить об этом в Servlet или любом управляемом компоненте CDI.
|
01
02
03
04
05
06
07
08
09
10
|
@Singleton@Startup@JMSDestinationDefinition(interfaceName = "javax.jms.Queue", name = "java:comp/env/EmailQueue")public class EmailQueueAutoProvisionService { @PostConstruct public void confirm(){ System.out.println("Email Queue configured"); }} |
Какой смысл всего этого?
Сервер приложений контейнера / Java EE обеспечивает доступность артефактов JMS для вашей логики приложения по требованию
- Это ценно в PaaS, микросервисах, dockerized и любых других средах, которые активно используют автоматизированное развертывание
- Хорошо для автоматического тестирования
- Это еще один элемент для размышления и настройки!
Дополнительные ресурсы
- Документ спецификации JMS 2.0
- У них тоже есть твиттер-аккаунт !
- Блог Аквариума для всех вещей Java EE
Ура!
| Ссылка: | Автоматическая подготовка ресурсов JMS в Java EE 7 от нашего партнера по JCG Абхишека Гупты в блоге Object Oriented .. |