Message-Driven Bean
MDB przypominają bezstanowe session bean-y: obiekty MDB nie przechowują danych albo stanu komunikacji z klientem wszystkie obiekty MDB są podobne, pozwala to kontenerowi EJB na przypisywanie wiadomości (komunikatu) do dowolnego obiektu MDB pojedynczy obiekt MDB może przetwarzać komunikaty od wielu klientów
Klient nie lokalizuje samodzielnie obiektów i wywołuje ich metody zamiast tego wysyła komunikat do określonego celu, którego to MDB jest słuchaczem (MessageListener).
MDB charakteryzują się : przyczyna ich działania jest otrzymanie komunikatu od klienta są wywoływane asynchronicznie nie reprezentują bezpośrednio danych przechowywanych w bazie ale mogą mieć do nich dostęp i je modyfikować mogą być wykorzystywać transakcje są bezstanowe.
Nadawcy komunikatów J2EE komponenty klient aplikacji inny EJB komponent sieciowy. aplikacja lub system, które nie korzystają z technologii J2EE
Zadania przygotowawcze wykonywane przez kontener EJB : tworzy konsumenta komunikatów, związuje MDB z miejscem docelowym i fabryką połączeń w czasie instalacji rejestracja message Listenera poprzez metodę setMessageListener określa sposób powiadamiania o komunikatach
Schemat umieszczenia MDB
Kiedy komunikat znajdzie się w kolejce, kontener EJB wywołuje metodę onMessage, która ma się zatroszczyć o sprawdzenie poprawności komunikatu i wykonać odpowiednie działania.
Oprócz metody onMessage MDB powinien implementować: interfejsy javax.ejb.MessageDrivenBean i javax.jms.MessageListener public void ejbCreate() {} do nawiązywania innych synchronicznych połączeń z innymi EJB public void ejbRemove() {} do zamykania połączeń nawiązywanych przez ejbCreate() public void setMessageDrivenContext(MessageDrivenContext mdc) {} do zarządzania transakcjami
Metoda onMessage powinna: być zadeklarowana jako public typ zwracany void musi mieć jeden argument typu javax.jms.Message klauzula throws nie może zawierać wyjątków aplikacji The onMessage method must be invoked in the scope of a transaction that is determined by the transaction attribute specified in the deployment descriptor.
Metody ejbCreate i ejbRemove zadeklarowane jako public typ zwracany void nie może być stacic lub final nie mogą wyrzucać wyjątków aplikacji nie mogą mieć żadnych argumentów
Możliwe sposoby zachowania synchronizacji numerowanie komunikatów na poziomie aplikacji, późniejsze komunikaty są przetrzymywane dopóki wcześniejsze nie zostaną przetworzone. każdy komunikat lub grupa komunikatów wymagają wiadomości potwierdzającej, nadawca blokuje się oczekując na taką wiadomość