среда, 10 июня 2015 г.

Как может выглядеть JMS 2.1

Интересно, как много коллег, читающих мой блог, помнят, сколько времени жила и безраздельно властвовала спецификация JMS 1.1, предлагающая разработчикам для отправки или приема сообщения написать довольно громоздкий блок кода, больше напоминающий известную притчу о том, что Авраам родил Исаака, Исаак - Иакова, Иаков - Иуду, а потом у них что-то случилось и рожать стали женщины?

Появившаяся в составе Java EE 7 спецификация JMS 2.0 существенно улучшила ситуацию, особенно в части, отвечающей за корректное закрытие ресурсов. Однако нет предела совершенству и сейчас сообщество активно работает над новой версией спецификации - JSR 368 - JMS 2.1. Код подписчика на топик/очередь сообщений, написанный в соответствии с новой спецификацией, может выглядеть следующим образом:



Видно, что развитие спецификации идет по пути упрощения кодирования. Теперь управляемый сообщениями компонент (Message-Driven Bean) не обязан реализовывать интерфейс MessageListener, а метод, в котором реализуется обработка сообщений, не обязан называться onMessage. "Реагировать" на сообщение может любой метод, аннотированный как @JMSListener. Другое интересное новшество - произвольный набор параметров у метода, аннотированного как @JMSListener: разработчик избавлен от необходимости разбирать сообщение внутри данного метода-слушателя вручную (особенное счастье - отсутсвие тягомотины вида TextMessage textMessage = (TextMessage) message;), достаточно лишь объявить произвольный набор формальных параметров метода, аннотировав каждый из них должным образом. Мне лично это напоминает реализацию JAX-WS веб-сервиса: разработчик избавлен от необходимости работать в своем коде с неким SOAPEnvelope и вручную перемещаться по его вложенным элементам с целью найти значения входных параметров. Эту однообразную работу берет на себя среда исполнения, достаточно просто сказать ей какие параметры нас интересуют и как они называются в SOAP-сообщении, используя аннотацию @WebParam. Теперь подобное будет реализовано и в JMS, что лично меня сильно радует, я выступаю за однообразие при решении типовых проблем. В конце-концов парсить сообщения - это не работа для человека, а как говорят в IBM: "Человек должен думать, а компьютер работать".

Исходный код интерфейсов и аннотаций, составляющих спецификацию, доступен на сайте java.net.

Понравилось сообщение - подпишитесь на блог

Комментариев нет:

Отправить комментарий

Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!