Message-Driven Beans Василий Кряжев VKryazhev@luxoft.com.

Презентация:



Advertisements
Похожие презентации
Исключения в EJB Кряжев Василий
Advertisements

1. Определить последовательность проезда перекрестка
Урок повторения по теме: «Сила». Задание 1 Задание 2.
EJB Environment Кряжев Василий
Interceptors Василий Кряжев
EJB Local Interface Кряжев Василий

Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Школьная форма Презентация для родительского собрания.
Session beans Василий Кряжев
1 Знаток математики Тренажер Таблица умножения 2 класс Школа 21 века ®м®м.
Рассматриваемые темы Технология EJB Типы EJB Вызов EJB Сборка и развертывание EJB- приложения 2-1.
Рассматриваемые темы Подсистема безопасности сервера приложений Конфигурация безопасности в EJB Сервисы авторизации и аутентификации в Java 2-1.
Ребусы Свириденковой Лизы Ученицы 6 класса «А». 10.
Рассматриваемые темы Введение в кластеринг Кластеринг Stateless session beans Кластеринг Stateful session beans Конфигурация кластеринга 2-1.
Тем, кто учит математику, Тем, кто учит математике, Тем, кто любит математику, Тем, кто ещё не знает, Что может полюбить математику Посвящается…
Таблица умножения на 8. Разработан: Бычкуновой О.В. г.Красноярск год.
Фрагмент карты градостроительного зонирования территории города Новосибирска Масштаб 1 : 6000 Приложение 7 к решению Совета депутатов города Новосибирска.
Разработал: Учитель химии, биологии высшей квалификационной категории Баженов Алексей Анатольевич.
Проектирование архитектуры ИСО 1. UML 2 Структура определения языка 4.
Транксрипт:

Message-Driven Beans Василий Кряжев

Рассматриваемые темы Понятие обмена сообщениями Обзор Java Message Service Написание простых JMS клиентов Message-Driven Beans 1-2

Рассматриваемые темы Понятие обмена сообщениями Определение обмена сообщениями Message-oriented middleware (MOM) Обзор Java Message Service Написание простых JMS клиентов Message-Driven Beans 1-3

Обмен сообщениями (messaging) Обмен сообщениями это механизм который позволяет программам взаимодействовать друг с другом Существует различные способы обмена сообщениями, такие как: TPC/IP sockets Pipes Files Shared memory Определение: 1-4

Асинхронные сообщения Могут быть предпочтительнее синхронного вызова методов, в случае если метод ничего не возвращает Позволяют лучше использовать серверные ресурсы 1-5

Очереди сообщений Могут улучшить производительность Позволяют задание приоритета (сообщения с высоким приоритетом обрабатываются раньше) 1-6

1-7 Message-oriented middleware Существует целый класс систем (готовые инфраструктуры), которые позволяют приложениям взаимодействовать друг с другом, через механизм обмена сообщений

Рассматриваемые темы Понятие обмена сообщениями Обзор Java Message Service Модель доставки Point-to-Point Модель доставки Publish/Subscribe Долговременные подписчики Написание простых JMS клиентов Message-Driven Beans 1-8

Java Message Service JMS Java Message Service (JMS) это стандартный API для доступа к message-oriented middleware (MOM). 1-9

1-10 Использование JMS Выгоды при использовании JMS: см. далее

Использование JMS Стандартный, независимый от вендора API Приложения использующие JMS API более переносимы от одного вендора к другому Асинхронные сообщения Выгоды при использовании JMS: 1-11

JMS приложения Системы которые обрабатывают маршрутизацию и доставку сообщений называют JMS Provider Приложения использующие JMS называют JMS Client JMS Application это бизнес система обычно состоящая из множества JMS Clients и одного JMS Provider 1-12

JMS клиенты Клиент который посылает сообщения называется поставщик (producer) Клиент который получает сообщения называется потребитель (consumer) Клиент может быть и потребителем и поставщиком одновременно 1-13

1-14Destination Destination это место в JMS сервере где сообщение ждет пока оно не будет обработано

JMS Messaging Domains Point-to-Point Publish/Subscribe JMS определяет две модели доставки: 1-15

1-16Терминология Термины зависят от модели доставки:

Point-to-Point Может быть много отправителей (senders) и много получателей (receivers) Сообщение получает только один получатель Возможна как асинхронная так и синхронная отправка сообщений 1-17 Модель доставки сообщений PTP: см. далее

1-18Point-to-Point Модель доставки сообщений PTP:

Publish/Subscribe Позволяет издателям (publishers) не зависеть от подписчиков (subscribers), уменьшая связность в приложении Сообщение доставляется всем подписчикам Возможна долговременная (durable) подписка 1-19 Модель доставки сообщений Pub/Sub: см. далее

1-20Publish/Subscribe Модель доставки сообщений Pub/Sub:

1-21 Обмен сообщениями в JMS

Долговременные подписчики Регистрируются у JMS Provider`а Получают сообщения, которые были доставлены пока они были неактивны JMS Provider отвечает за сохранение сообщений для таких подписчиков 1-22

Выводы Модель доставки сообщений Point- to-Point Модель доставки сообщений Publish/Subscribe Долговременных подписчиков В этой секции мы обсудили: 1-23

Рассматриваемые темы Понятие обмена сообщениями Обзор Java Message Service Написание простых JMS клиентов Написание простого JMS Producer Написание простого JMS Consumer Message-Driven Beans 1-24

1-25 Создание JMS Producer Шаги для отправки сообщения см. далее

1-26 Создание JMS Producer Шаги для отправки сообщения

Шаг 1. Поиск ConnectionFactory Легковесный объект хранящийся в JNDI Используется для создания новых соединений Один из двух типов: javax.jms.QueueConnectionFactory javax.jms.TopicConnectionFactory Connection Factory: 1-27

Шаг 2. Создание Connection Используется для взаимодействия с JMS сервером Используется для создания сессий Один из двух типов: javax.jms.QueueConnection javax.jms.TopicConnection Connection: 1-28

Шаг 3. Создание Session Используется для создания senders, receivers и messages Используется для демаркации транзакций Один из двух типов: javax.jms.QueueSession javax.jms.TopicSession Session: 1-29

Шаг 4. Поиск Destination Легковесный объект хранящийся в JNDI Идентифицирует цель (target) сообщения Один из двух типов: javax.jms.Queue javax.jms.Topic Destination: 1-30

Шаг 5. Отправка сообщения Позволяет отправлять сообщение в destination Позволяет определить параметры доставки Один из двух типов: javax.jms.QueueSender javax.jms.TopicPublisher Message Producer: 1-31

Пример JMS Producer Context ctx = new InitialContext(); /* Шаг 1. Поиск ConnectionFactory */ QueueConnectionFactory qfactory = (QueueConnectionFactory) ctx.lookup("queueConnectionFactoryJndiName"); /* Шаг 2. Создание Connection */ QueueConnection qcon = qfactory.createQueueConnection(); /* Шаг 3. Создание Session, не транзакционной */ QueueSession qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); 1-32 см. далее JMSProducer.java

Пример JMS Producer /* Шаг 4. Поиск Destination */ Queue queue = (Queue) ctx.lookup("queueJndiName"); /* Шаг 5. Создание Sender и отправка сообщения */ QueueSender qsender = qsession.createSender(queue); as TextMessage msg = qsession.createTextMessage(); qcon.start(); msg.setText("Hello JMS world"); qsender.send(msg); 1-33 JMSProducer.java

Модели оповещения Session.AUTO_ACKNOWLEDGE Session.CLIENT_ACKNOWLEDGE Session.DUPS_OK_ACKNOWLEDGE Задается в не транзакционных сессиях: 1-34

Сообщения в JMS TextMessage MapMessage ObjectMessage StreamMessage BytesMessage Можно реализовать свой тип сообщения Класс реализующий javax.jms.Message: 1-35

Создание JMS Consumer Чтобы получить сообщение из destination, Шаги 1-4 совпадают с приведенными ранее. Затем для получения сообщения используйте: QueueBrowser QueueReceiver TopicSubscriber Шаги для получения сообщения 1-36

Пример JMS Consumer // Начальный поиск в JNDI … // Создание потребителя сообщений QueueReceiver qreceiver = qsession.createReceiver(queue); qcon.start(); TextMessage message = (TextMessage) qreceiver.receive(); System.out.println("Message is: " + message.getText()); 1-37 JMSReceiver.java

Выводы Создание простого JMS Producer Создание простого JMS Consumer В этой секции мы обсудили: 1-38

Рассматриваемые темы Понятие обмена сообщениями Обзор Java Message Service Написание простых JMS клиентов Message-Driven Beans Архитектура Message-Driven Beans Написание JMS MDBs 1-39

Message-Driven Beans MDBs это EJB которые потребляют (consume) сообщения Не видны клиенту, не имеют бизнес интерфейса, клиенты не получают от них исключений Выполняются как stateless сервисы Контролируются контейнером Сами могут посылать сообщения 1-40

JMS Message-Driven Beans Реализуют интерфейс javax.jms.MessageListener Потребляют (consume) сообщения из очередей (queue) или тем (topic) 1-41

1-42 MDBs как потребители сообщений

1-43 MDB жизнненый цикл

MessageListenter package javax.jms; public interface MessageListener { void onMessage(javax.jms.Message message); } Интерфейс javax.jms.MessageListener 1-44 MessageListener.java

Разработка JMS MDBs Помечен аннотацией javax.ejb.MessageDriven, либо описание содержится в дескрипторе развертывания Содержит конструктор без параметров (явно или неявно) Класс Message-Driven Bean: 1-45 см. далее

Разработка JMS MDBs Реализует интерфейс слушателя (для JMS javax.jms.MessageListener) Опционально реализует методы обратного вызова для событий жизненного Класс Message-Driven Bean: 1-46

MessageDriven { java.lang.String name() default ""; java.lang.Class messageListenerInterface() default java.lang.Object.class; javax.ejb.ActivationConfigProperty[] activationConfig() default {}; java.lang.String mappedName() default ""; java.lang.String description() default ActivationConfigProperty { java.lang.String propertyName(); java.lang.String propertyValue(); } 1-47 MessageDriven.java ActivationConfigProperty.java

Пример mappedName = "com.acme.Queue", name = "WatchProcessMDB", activationConfig = propertyName = destinationType", propertyValue = "javax.jms.Queue") } ) public class WatchProcessMDB implements MessageListener { public void onMessage(Message message) { // обработать сообщение } 1-48 WatchProcessMDB.java

MessageDrivenContext // можно инжектить ссылку на MessageDrivenContext, также как для session MessageDrivenContext mdbContext; public interface EJBContext { java.security.Principal getCallerPrincipal(); boolean isCallerInRole(java.lang.String s); UserTransaction getUserTransaction() throws IllegalStateException; void setRollbackOnly() throws java.lang.IllegalStateException; boolean getRollbackOnly() throws java.lang.IllegalStateException; javax.ejb.TimerService getTimerService() throws java.lang.IllegalStateException; java.lang.Object lookup(java.lang.String s); … } /* не добавляет ни одного нового метода */ public interface MessageDrivenContext extends EJBContext {} 1-49

1-50 Транзакции и MDBs Метод onMessage поддерживает Container-managed transactions (CMT) Bean-managed transactions (BMT) Клиентская демаркация транзакций в JMS не поддерживается

Модель подтверждения Контейнер автоматически отсылает подтверждение JMS серверу Для CMT когда происходит commit транзакции Для BMT чтобы определить модель подтверждения используется параметр acknowledgeMode 1-51

Модель activationConfig = propertyName = "acknowledgeMode", propertyValue = propertyName = "destinationType", propertyValue = "javax.jms.Queue") } ) Определение Acknowledge Mode: 1-52

Селектор activationConfig = propertyName = "messageSelector", propertyValue = "JMSPriority >= propertyName = "destinationType", propertyValue = "javax.jms.Queue") } ) Определение Message Selector: 1-53

Долговременный activationConfig = propertyName = subscriptionDurability", propertyValue = propertyName = "destinationType", propertyValue = "javax.jms.Topic") } ) Определение Durable Subscription: 1-54

Пример public class MDBSimple implements MessageListener { public void onMessage(Message msg) { if (msg instanceof TextMessage) { TextMessage t = (TextMessage) msg; try { System.out.println("Consumed message: " + t.getText()); } catch (JMSException e) { e.printStackTrace(); } 1-55 Класс реализации: см. далее MDBSimple.java

Пример MDB MDBSimple com.acme.MDBSimple javax.jms.MessageListener Container javax.jms.Topic destinationType javax.jms.Topic Дескриптор развертывания: 1-56 ejb-jar.xml

Выводы Архитектуру MDBs Создание JMS MDBs В этой секции мы обсудили: 1-57

Практика Асинхронная обработка сообщений с помощью MDB Упражнение 1-58

Выводы Обработку сообщений Java Message Service Message-Driven Beans В этом модуле мы обсудили: 1-59