Компоненты, управляемые сообщениями. Введение в компоненты, управляемые сообщениями. Интерфейс JMS, страница 5

Определение компонентов, управляемых сообщениями, в приложениях масштаба предприятия

Связь по принципу удаленного вызова процедур (Remote Procedure Call— RPC), которая применяется, в частности, в сеансовых компонентах, имеет тот недостаток, что отправитель должен ожидать ответа на свой запрос. Представим, например, что мы вызываем деловой метод в другом компоненте сеанса. Мы не сможем предпринять никаких других действий, пока вызванный метод не возвратит управление. Что делать, если эта задача отнимает много времени и не имеет первостепенной важности? Очевидно, в этой ситуации возможен только компромисс между важностью выполнения задачи и общей производительностью приложения.

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

В примере банковской системы HomeDirect управляемый сообщениями компонент можно применить для регистрации любой заслуживающей внимания информации о работе системы и возникающих проблемах. Компоненты HomeDirect будут просто посылать сообщения в определенную тему и возвращаться к своей работе. Когда компонент, управляемый сообщениями, будет получать такие сообщения, он будет обрабатывать их согласно их типу. Подобные компоненты можно применять также для интеграции в систему ранее разработанных приложений.

Пример взаимодействия сеансового компонента и компонента, управляемого сообщениями, показан на рис. 14.7. В этом сценарии сеансовый компонент, предварительно найдя адресата — интерфейс JNDI (Java Naming and Directory Interface, см. главу 2), — посылает ему сообщение. Контейнер находит это сообщение и вызывает метод onMessage управляемого сообщениями компонента. В методе onMessage производится заданная обработка сообщения.

Часто возникает вопрос — как передать результат обработки стороне, пославшей сообщение? В текущей спецификации EJB 2.0 для этой цели нет формально определенного механизма. Обычно производится изменение или создание временного адресата специально для ответа, а информация об этом адресате передается в компонент в самом сообщении.

Еще один момент, о котором не следует забывать при разработке управляемого сообщениями компонента, — тип сообщения. Компонент должен быть способен обрабатывать поступающие сообщения любого из поддерживаемых типов. Например, если ожидается сообщение типа ObjectMessage, компонент должен быть готов и к обработке сообщения типа TextMessage. Это вызвано тем, что сообщением может стать любой объект, поддерживающий интерфейс сообщения.

Резюме

Управляемые сообщениями компоненты появились в версии J2EE 1.3. Они предназначены для обработки сообщений JMS и полезны в ситуациях, где синхронность не требуется или нежелательна. Хороший пример — применение таких компонентов для интегрирования слабосвязанных систем.

Диаграммы классов UML используются для моделирования как клиентского, так и внутреннего представлений, хотя в компоненте, управляемом сообщениями, нет интерфейсов для клиента. Моделирование производится с помощью подсистем, классов, методов, полей и стереотипов. Связь с компонентами, управляемыми сообщениями, происходит асинхронно через сообщения, отправляемые в тему или очередь.

В управляемых сообщениями компонентах допускается использование транзакций, как и в других компонентах EJB. Класс реализации таких компонентов содержит методы жизненного цикла и логику приложения.