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

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

Транзакции

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

Подобно всем другим компонентам EJB, управляемые сообщениями компоненты позволяют устанавливать для методов, вызываемых клиентом, атрибуты транзакций. Здесь к таким методам относится только метод onMessage; клиент вызывает его лишь косвенно.

Класс реализации

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

·  setMessageDrivenContext. Этот обязательный метод вызывается контейнером EJB. Он позволяет сохранять информацию контекста в локальной переменной экземпляра.

·  еjbCreate. В классе реализации должен присутствовать только один метод с таким именем, без параметров и с пустым (void) возвращаемым типом. С помощью этого метода контейнер EJB создает новые экземпляры компонента.

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

·  onMessage. В классе реализации должен присутствовать только один метод с таким именем, с одним параметром — сообщением JMS и с пустым возвращаемым типом.С помощью этого метода контейнер EJB обрабатывает все сообщения JMS. Логика EJB находится в этом методе или по крайней мере вызывается из него.

Класс реализации может содержать дополнительные методы, которые играют вспомогательную роль в поддержке логики метода onMessage. Кроме того, в структуре компонента, управляемого сообщениями, могут быть другие классы, используемые классом реализации. Наконец, класс реализации содержит обязательное поле MessageDrivenContext.

На рис. 14.4 показан пример реализации управляемого сообщениями компонента.

Жизненный цикл компонента, управляемого сообщениями

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

Обычные сценарии компонента, управляемого сообщениями

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

1.  Клиент определяет адресата JMS для компонента.

2.  Клиент посылает адресату сообщения JMS.

Диаграмма последовательностей UML, соответствующая типичному сценарию, показана на рис. 14.6.

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

Управляемые сообщениями компоненты могут использовать при выполнении своей работы другие классы Java и сами использоваться другими объектами. В данном разделе рассматриваются особенности моделирования таких отношений.

Компоненты, управляемые сообщениями, и другие классы

Как и любой другой класс Java, управляемый сообщением компонент может использовать в своей работе другие классы Java. Такие отношения моделируются как обычно.

Компоненты, управляемые сообщениями, и другие технологии J2EE

Отношения между компонентом, управляемым сообщениями, и объектом другой технологии J2EE примерно одинаковы. Каждый такой объект (сервлет, сеансовый компонент, компонент-сущность и т.д.) должен связываться с компонентом через его адресата. Поэтому никаких особых аспектов в моделировании этих отношений нет.