Главная » Java, Web, XML » MDB-компоненты

0

Компоненты типа MDB (Message Driven Beans) работают асинхронно под управлением EJB-контейнера. Контейнер получает сообщение от клиента, точнее говоря, от службы сообщений, через которую действует клиент, активизирует MDB-компонент и обращается к его методам. Клиент никак не связан с MDB-компонентом, более того, клиент не подозревает о его существовании. Клиент обращается только к службе сообщений. Поэтому для MDB-компонента не нужны ни remote- ни home-интерфейсы, он состоит только из одного или нескольких классов. Класс MDB-компонента должен реализовать                 MessageDrivenBean.

Интерфейс MessageDrivenBean описывает всего два метода public void setMessageDrivenContext (MessageDrivenContext ctx)

throws EJBException public void ejbRemove () throws EJBException

реализуемые EJB-контейнером.

Интерфейс MessageDrivenContext, расширяющий интерфейс EJBContext, ничего не добавляет к методам интерфейса EJBContext. Поэтому класс MDB-компонента может получить только сведения о транзакции, если он участвует в какой-либо транзакции. Более того, он не может воспользоваться методами интерфейса EJBContext, предоставляющими сведения о клиенте и ссылки на remote- и home-интерфейсы.

EJB-контейнер создает экземпляр MDB-компонента так же, как экземпляр поэтому в нем должен быть открытый конструктор по умолчанию и метод ejbCreateO без аргументов. В этом методе можно записать начальные действия компонента.

Главное, что должен сделать класс MDB-компонента — это реализовать интерфейс-слушатель службы сообщений. Если MDB-компонент связан со службой сообщений JMS (Java Message Service), то он должен реализовать интерфейс MessageListener. Если MDB-компонент связан с пакетом JAXM, то он реализует интерфейс OnewayListener или интерфейс RegRespListener. Об этих интерфейсах говорилось в предыдущей главе 6. Каждый из этих интерфейсов описывает по одному методу                                                     в

котором и заключена основная работа MDB-компонента.

Правила реализации интерфейса MessageListener описаны в книгах [7, 10]. Заголовок его единственного метода имеет следующий вид:

public void onMessage (Message msg) ;

Аргумент msg, передаваемый этому методу контейнером, содержит полученное сообщение в виде объекта типа Message. Интерфейс Message содержит

множество методов доступа к различным заголовкам и частям сообщения системы JMS. Он подробно описан в книге [10].

Приведем в листинге 7.6 простейший пример MDB-компонента, отправляющего сведения о полученных сообщениях в стандартный вывод.

Листинг 7.6. Простейший MDB-компонент

import javax. ejb. *; import javax. jms.*; import java.util.*;

public class DummyMDB

implements MessageDrivenBean, MessageListener f

public void try{

System.out.println("\nIIony4eHo сообщение " + msg.getJMSMessageID() + " для адресата " + msg.getJMSDestination());

System.out.println("\пСрок хранения " + (msg.getJMSExpiration() > 0 ?

new Date (msg. getJMSExpiration ()) : "не

System.out.println("\пОтвет послать: " + msg.getJMSReplyTo());

сообщения " +

msg.getJMSType() ) ;

if (msg instanceof TextMessage)

System, out.println ("\пТело сообщениями" + ((TextMessage)msg).getTextO);

}catch(Exception e){

System.err.println(e) ;

}

)

public void ejbCreate () {} public void ejbRemove () {} public void setMessageDrivenContext ( MessageDrivenContext mdc) (}

)

Литература:

Хабибуллин И. Ш. Разработка Web-служб средствами Java. — СПб.: БХВ-Петербург, 2003. — 400 с: ил.

По теме:

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