EJB3 - MDB


Po co stosować komunikację przy pomocy komunikatów

Realizacja

Powyższe zalety uzyskujemy dzięki wprowadzeniu serwera pośredniczącego, tzw. Message-oriented middleware (MOM). Jak to zwykle bywa pośrednik rozwiązuje kilka problemów, ale wprowadza narzut na efektywność. Użycie napisanego przez ekspertów MOM umożliwia skorzystanie z wielu przydatnych funkcji (np. gwarantowane dostarczanie wiadomości lub równoważenie obciążenia) i skupić się na zadaniu które próbujemy rozwiązać.

Java Message Service (JMS) to API standaryzujące sposób dostępu do usług MOM w programach napisanych w Javie. Pomysł jest analogiczny do JNDI i JDBC.

Komunikaty są wysyłane przez producetów do celu (destination), który je przesyła do konsumentów. Pośredniczenie może odbywać się na dwa istotnie różne sposoby:

Model programistyczny

  1. należy przez JNDI odnaleźć ConnectionFactory
  2. przy jego pomocy tworzony jest obiekt Connection
  3. przy pomocy którego należy utworzyć obiekt Session
  4. ponownie przy pomocy JNDI trzeba odnaleźć cel (Topic lub Queue)
  5. przy pomocy sesji oraz celu tworzony jest producer (Producer) lub konsument (Consumer)
  6. producer/konsument wysyłają lub odbierają komunikaty
PARENT INTERFACE
POINT-TO-POINT
PUB/SUB
ConnectionFactory QueueConnectionFactory TopicConnectionFactory
Connection QueueConnection TopicConnection
Destination Queue Topic
Session QueueSession TopicSession
MessageProducer QueueSender TopicPublisher
MessageConsumer QueueReceiver
QueueBrowser
TopicSubscriber

Ciekawostki

Przykład

Strona HTML zawiera formularz pozwlający podać liczbę wysyłanych komunikatów i wybrać czy stosować komunikację PTP czy Pub/sub. Informacje z formularza są odczytywane przez serwlet, który wysyła wskazaną liczbę komunikatów do odpowiednio kolejki lub tematu. Do każdego komunikatu dołączana jest informacja o tymczasowej kolejce, przez którą serwlet oczekuje odpowiedzi. Po wysłaniu wszystkich komunikatów serwlet odbiera odpowiedzi zakładając, że i zarówno kolejka jak i temat mają po dwóch odbiorców. Odpowiedzi są wyświetlane na wynikowej stronie HTML. (Uwaga: trzeba sobie wyedytować stałą deploy.dir w build.xml)

Message-Driven Beans

Zadanie

Proszę odnaleźć jak osadzić kilka beanów mając jedną klasę.