Главная » Spring » Создание объекта для чтения сообщений Spring

0

Если бы потребовалось реализовать прием извещений о новых сообщениях в приложении Spitter с использованием модели, опреде- ляемой спецификацией EJB, нам пришлось бы задействовать анно-

тацию @MessageDriven. И реализовать интерфейс MessageListener, хотя это и не обязательно. Результат выглядел бы, как показано ниже:

@MessageDriven(mappedName="jms/spittle.alert.queue")

public  class  SpittleAlertHandler  implements  MessageListener  {

@Resource

private MessageDrivenContext mdc;

public  void  onMessage(Message  message)  {

}

}

На мгновение представьте более простой мир, где от компонентов, управляемых сообщениями, не требуется реализовать интерфейс MessageListener. В этом счастливом мире небо всегда было бы голу- бым, птицы всегда насвистывали бы вашу любимую песню, и вам не пришлось бы писать реализацию метода onMessage() или внедрять компонент MessageDrivenContext.

Ладно, требования спецификации EJB 3, предъявляемые к MDB, возможно, не самые сложные. Но сам факт, что реализация Spittle- AlertHandler оказывается слишком тесно связанной с API специфика- ции EJB и далека от POJO, весьма неприятен. В идеале хотелось бы, чтобы обработчик извещений был способен обрабатывать сообще- ния, но был реализован так, чтобы не иметь тесной зависимости от конкретного API.

Фреймворк Spring обеспечивает возможность задействовать ме- тод простого объекта POJO для обработки сообщений, извлекаемых из очереди или из темы JMS. Например, в листинге 13.5 представ- лена POJO-реализация класса SpittleAlertHandler, которой вполне достаточно для нужд приложения.

Листинг 13.5. Spring MDP, асинхронно получающий и обрабатывающий сообщения

package   com.habuma.spitter.alerts;   import   com.habuma.spitter.domain.Spittle;

public  class  SpittleAlertHandler  {

public void processSpittle(Spittle spittle) {         // Метод-обработчик

// …здесь находится реализация метода…

}

}

Хотя управление цветом неба и дрессировка птиц вне компетен- ции фреймворка Spring, тем не менее листинг 13.5 демонстрирует, что сказочный мир, описанный выше, не так уж и далек от реально- сти. Мы еще вернемся к реализации метода processSpittle(). А пока обратите внимание, что в классе SpittleAlertHandler нет ничего, что говорило бы о связи с JMS. Это самый простой, самый обычный объект POJO во всех смыслах этого слова. Однако он может обра- батывать сообщения, подобно своим собратьям, компонентам EJB. Все, что ему требуется для работы, – это некоторые специальные настройки в конфигурационном файле Spring.

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

По теме:

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