120 likes | 293 Views
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
E N D
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
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 onMessageMDB powinien implementować: • interfejsyjavax.ejb.MessageDrivenBean i javax.jms.MessageListener • publicvoid 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
MetodaonMessage 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ść