Главная » Spring » Создание POJO, управляемых сообщениями Spring

0

Во время учебы в колледже в одни из летних каникул мне дове- лось работать в Йеллоустонском национальном парке (Yellowstone National Park). Это была не такая высококвалифицированная рабо- та, как у смотрителя парка или у парня, включающего и выключаю- щего гейзер «Старый служака» (Old Faithful). Я работал в гостинице

«Old Faithful Inn» – менял белье, чистил ванные и пылесосил полы. Не очень интересно, зато я работал в одном из красивейших мест на Земле.

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

Человеку за стойкой было примерно 195 лет. И как всякому в этом возрасте, ему было тяжело ходить. Он отрывал свой зад от та- бурета, медленно срывался с места и исчезал за загородкой. Спустя некоторое время он появлялся, возвращался к стойке и водружал се- бя на табурет. Затем оглядывал меня и говорил: «Сегодня – ничего».

Метод receive() класса  JmsTemplate  действует  практически  так же, как тот служащий на почте. Когда программа вызывает метод receive(), он выходит и проверяет наличие сообщения в очереди или

в теме, но не возвращается, пока сообщение не поступит или пока не истечет предельное время ожидания. В это время приложение

«стоит возле стойки» и ничего не делает. Разве не было бы лучше, если бы приложение могло продолжать заниматься своими делами и извещалось бы в момент поступления сообщения?

Одним из отличительных моментов спецификации EJB 2 было включение в нее компонентов, управляемых сообщениями (Message- Driven Beans, MDB). Компоненты MDB – это компоненты EJB, обрабатывающие сообщения асинхронно. Иными словами, MDB реагируют на сообщения, появляющиеся в приемнике JMS, как на события. Этим они в корне отличаются от компонентов, выполняю- щих прием сообщений синхронно, выполнение которых блокирует- ся в отсутствие сообщений.

Компоненты MDB ярко выделялись на общем ландшафте EJB. Да- же самые непримиримые критики EJB признавали, что компоненты MDB являются весьма элегантным способом обработки сообщений. Единственным недостатком компонентов MDB в спецификации EJB 2 была необходимость поддержки ими интерфейса javax.ejb.Message- DrivenBean. При этом они также должны были реализовать некоторые методы обратного вызова поддержки жизненного цикла. Проще го- воря, компоненты MDB были далеко не простыми Java-объектами.

Компоненты MDB были убраны из спецификации EJB 3, где предпочтение было отдано более простым POJO. Теперь больше не требуется включать реализацию интерфейса MessageDrivenBean. Вмес- то этого требуется реализовать более обобщенный интерфейс javax. jms.MessageListener и использовать аннотацию @MessageDriven.

Начиная с версии 2.0, фреймворк Spring решил проблему асин- хронного чтения сообщений, предоставив собственную реализацию компонентов, управляемых сообщениями, которые очень похожи на компоненты MDB, определяемые спецификацией EJB 3. В этом раз- деле рассказывается о поддержке асинхронного чтения сообщений в Spring с применением POJO, управляемых сообщениями (назовем их MDP для краткости).

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии