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