пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ


Message Driven Beans (MDB), жизненный цикл компонентов. Особенности применения и функционирования, реализующие методы (примеры).

Бин, управляемый сообщениями, - корпоративный бин, который позволяет приложениям J2EE асинхронно обрабатывать сообщения. Он действует, как слушатель сообщений JMS, который подобен слушателю событий, за исключением того, что вместо событий, он принимает сообщения. Сообщения могут отправляться любым компонентом J2EE - клиентским приложением, другим корпоративным бином или Web-компонентом - или при помощи приложения JMS или системы, которая не использует технологию J2EE.

MDB – это просто MessageListener: класс реализует javax.ejb.MessageDrivenBean и javax.jms.MessageListener.

Первый из этих интерфейсов имеет всего два метода (Рис. 3):

setMessageDrivenContext и ejbRemove.

Второй интерфейс имеет лишь один метод onMessage.

Спецификация требует также создания метода ejbCreate без параметров.

Клиент не создает объектов MDB. Контейнер сам решит, когда и сколько ему требуется MDB для обработки сообщений из данного destination (в данном случае это: это либо queue, либо topic – в зависимости от используемой модели: javax.jms.Queue или javax.jms.Topic..

Метод setMessageDrivenContext()класса ReservationProcessorBean устанавливает поле экземпляра ejbContext в значение MessageDrivenContext , которое было передано в метод. Кроме этого он получает ссылку на JNDI ENC, которую сохраняет в jndiContext. MDB может иметь поля экземпляра, похожие на поля экземпляра сеансового компонента без состояния. Значения этих полей сохраняются в экземпляре MDB в течение всей его жизни и могут многократно использоваться каж ый раз, когда он обрабатывает новое сообщение. В отличие от сеансовых компонентов с состоянием, у MDB нет состояния диалога, и они не предназначаются для одного клиента JMS. Экземпляры MDB применяются для обработки сообщений от нескольких разных клиентов JMS и связаны не с клиентом, а с определенной темой или очередью, от которых они принимают сообщения.

MessageListener.Кроме интерфейса MessageDrivenBean MDB реализуют интерфейс javax.jms.MessageListener ,в котором определен метод onMessage(). Разработчики компонентов реализуют данный метод для обработки сообщений JMS, получаемых компонентом. Именно в методе onMessage() компонент обрабатывает сообщение JMS:

package javax.jms;

public interface MessageListener { public void onMessage(Message message); }

Именно в методе onMessage() выполняется вся прикладная логика

Так же как объектные и сеансовые компоненты,компоненты MDB имеют четко определенный жизненный цикл. Жизненный цикл экземпляра MDB имеет два состояния:«не существует » и «пул готовых методов ».Пул готовых методов похож на пул экземпляров, используемый для сеансовых компонентов без состояния. Некоторые производители могут не использовать пул для MDB экземпляров, а вместо этого создавать и уничтожать экземпляры для каждого нового сообщения. Когда сообщение направлено экземпляру контейнером, MessageDrivenContext экземпляра MDB изменяется, чтобы отразить новый контекст транзакции. Экземпляр, закончивший обработку, сразу же становится доступным для обработки нового сообщения. Экземпляры компонентов переводятся из пула готовых методов в состояние «не существует », когда они становятся ненужными серверу. Это происходит, когда сервер принимает решение уменьшить общий размер пула готовых методов, удаляя из памяти один или несколько экземпляров. Этот процесс начинается с вызова метода ejbRemove()экземпляра.


28.05.2018; 16:57
хиты: 613
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь