Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемМарфа Таирова
1 Message-Driven Beans Василий Кряжев
2 Рассматриваемые темы Понятие обмена сообщениями Обзор Java Message Service Написание простых JMS клиентов Message-Driven Beans 1-2
3 Рассматриваемые темы Понятие обмена сообщениями Определение обмена сообщениями Message-oriented middleware (MOM) Обзор Java Message Service Написание простых JMS клиентов Message-Driven Beans 1-3
4 Обмен сообщениями (messaging) Обмен сообщениями это механизм который позволяет программам взаимодействовать друг с другом Существует различные способы обмена сообщениями, такие как: TPC/IP sockets Pipes Files Shared memory Определение: 1-4
5 Асинхронные сообщения Могут быть предпочтительнее синхронного вызова методов, в случае если метод ничего не возвращает Позволяют лучше использовать серверные ресурсы 1-5
6 Очереди сообщений Могут улучшить производительность Позволяют задание приоритета (сообщения с высоким приоритетом обрабатываются раньше) 1-6
7 1-7 Message-oriented middleware Существует целый класс систем (готовые инфраструктуры), которые позволяют приложениям взаимодействовать друг с другом, через механизм обмена сообщений
8 Рассматриваемые темы Понятие обмена сообщениями Обзор Java Message Service Модель доставки Point-to-Point Модель доставки Publish/Subscribe Долговременные подписчики Написание простых JMS клиентов Message-Driven Beans 1-8
9 Java Message Service JMS Java Message Service (JMS) это стандартный API для доступа к message-oriented middleware (MOM). 1-9
10 1-10 Использование JMS Выгоды при использовании JMS: см. далее
11 Использование JMS Стандартный, независимый от вендора API Приложения использующие JMS API более переносимы от одного вендора к другому Асинхронные сообщения Выгоды при использовании JMS: 1-11
12 JMS приложения Системы которые обрабатывают маршрутизацию и доставку сообщений называют JMS Provider Приложения использующие JMS называют JMS Client JMS Application это бизнес система обычно состоящая из множества JMS Clients и одного JMS Provider 1-12
13 JMS клиенты Клиент который посылает сообщения называется поставщик (producer) Клиент который получает сообщения называется потребитель (consumer) Клиент может быть и потребителем и поставщиком одновременно 1-13
14 1-14Destination Destination это место в JMS сервере где сообщение ждет пока оно не будет обработано
15 JMS Messaging Domains Point-to-Point Publish/Subscribe JMS определяет две модели доставки: 1-15
16 1-16Терминология Термины зависят от модели доставки:
17 Point-to-Point Может быть много отправителей (senders) и много получателей (receivers) Сообщение получает только один получатель Возможна как асинхронная так и синхронная отправка сообщений 1-17 Модель доставки сообщений PTP: см. далее
18 1-18Point-to-Point Модель доставки сообщений PTP:
19 Publish/Subscribe Позволяет издателям (publishers) не зависеть от подписчиков (subscribers), уменьшая связность в приложении Сообщение доставляется всем подписчикам Возможна долговременная (durable) подписка 1-19 Модель доставки сообщений Pub/Sub: см. далее
20 1-20Publish/Subscribe Модель доставки сообщений Pub/Sub:
21 1-21 Обмен сообщениями в JMS
22 Долговременные подписчики Регистрируются у JMS Provider`а Получают сообщения, которые были доставлены пока они были неактивны JMS Provider отвечает за сохранение сообщений для таких подписчиков 1-22
23 Выводы Модель доставки сообщений Point- to-Point Модель доставки сообщений Publish/Subscribe Долговременных подписчиков В этой секции мы обсудили: 1-23
24 Рассматриваемые темы Понятие обмена сообщениями Обзор Java Message Service Написание простых JMS клиентов Написание простого JMS Producer Написание простого JMS Consumer Message-Driven Beans 1-24
25 1-25 Создание JMS Producer Шаги для отправки сообщения см. далее
26 1-26 Создание JMS Producer Шаги для отправки сообщения
27 Шаг 1. Поиск ConnectionFactory Легковесный объект хранящийся в JNDI Используется для создания новых соединений Один из двух типов: javax.jms.QueueConnectionFactory javax.jms.TopicConnectionFactory Connection Factory: 1-27
28 Шаг 2. Создание Connection Используется для взаимодействия с JMS сервером Используется для создания сессий Один из двух типов: javax.jms.QueueConnection javax.jms.TopicConnection Connection: 1-28
29 Шаг 3. Создание Session Используется для создания senders, receivers и messages Используется для демаркации транзакций Один из двух типов: javax.jms.QueueSession javax.jms.TopicSession Session: 1-29
30 Шаг 4. Поиск Destination Легковесный объект хранящийся в JNDI Идентифицирует цель (target) сообщения Один из двух типов: javax.jms.Queue javax.jms.Topic Destination: 1-30
31 Шаг 5. Отправка сообщения Позволяет отправлять сообщение в destination Позволяет определить параметры доставки Один из двух типов: javax.jms.QueueSender javax.jms.TopicPublisher Message Producer: 1-31
32 Пример 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
33 Пример 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
34 Модели оповещения Session.AUTO_ACKNOWLEDGE Session.CLIENT_ACKNOWLEDGE Session.DUPS_OK_ACKNOWLEDGE Задается в не транзакционных сессиях: 1-34
35 Сообщения в JMS TextMessage MapMessage ObjectMessage StreamMessage BytesMessage Можно реализовать свой тип сообщения Класс реализующий javax.jms.Message: 1-35
36 Создание JMS Consumer Чтобы получить сообщение из destination, Шаги 1-4 совпадают с приведенными ранее. Затем для получения сообщения используйте: QueueBrowser QueueReceiver TopicSubscriber Шаги для получения сообщения 1-36
37 Пример 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
38 Выводы Создание простого JMS Producer Создание простого JMS Consumer В этой секции мы обсудили: 1-38
39 Рассматриваемые темы Понятие обмена сообщениями Обзор Java Message Service Написание простых JMS клиентов Message-Driven Beans Архитектура Message-Driven Beans Написание JMS MDBs 1-39
40 Message-Driven Beans MDBs это EJB которые потребляют (consume) сообщения Не видны клиенту, не имеют бизнес интерфейса, клиенты не получают от них исключений Выполняются как stateless сервисы Контролируются контейнером Сами могут посылать сообщения 1-40
41 JMS Message-Driven Beans Реализуют интерфейс javax.jms.MessageListener Потребляют (consume) сообщения из очередей (queue) или тем (topic) 1-41
42 1-42 MDBs как потребители сообщений
43 1-43 MDB жизнненый цикл
44 MessageListenter package javax.jms; public interface MessageListener { void onMessage(javax.jms.Message message); } Интерфейс javax.jms.MessageListener 1-44 MessageListener.java
45 Разработка JMS MDBs Помечен аннотацией javax.ejb.MessageDriven, либо описание содержится в дескрипторе развертывания Содержит конструктор без параметров (явно или неявно) Класс Message-Driven Bean: 1-45 см. далее
46 Разработка JMS MDBs Реализует интерфейс слушателя (для JMS javax.jms.MessageListener) Опционально реализует методы обратного вызова для событий жизненного Класс Message-Driven Bean: 1-46
47 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
48 Пример 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
49 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
50 1-50 Транзакции и MDBs Метод onMessage поддерживает Container-managed transactions (CMT) Bean-managed transactions (BMT) Клиентская демаркация транзакций в JMS не поддерживается
51 Модель подтверждения Контейнер автоматически отсылает подтверждение JMS серверу Для CMT когда происходит commit транзакции Для BMT чтобы определить модель подтверждения используется параметр acknowledgeMode 1-51
52 Модель activationConfig = propertyName = "acknowledgeMode", propertyValue = propertyName = "destinationType", propertyValue = "javax.jms.Queue") } ) Определение Acknowledge Mode: 1-52
53 Селектор activationConfig = propertyName = "messageSelector", propertyValue = "JMSPriority >= propertyName = "destinationType", propertyValue = "javax.jms.Queue") } ) Определение Message Selector: 1-53
54 Долговременный activationConfig = propertyName = subscriptionDurability", propertyValue = propertyName = "destinationType", propertyValue = "javax.jms.Topic") } ) Определение Durable Subscription: 1-54
55 Пример 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
56 Пример MDB MDBSimple com.acme.MDBSimple javax.jms.MessageListener Container javax.jms.Topic destinationType javax.jms.Topic Дескриптор развертывания: 1-56 ejb-jar.xml
57 Выводы Архитектуру MDBs Создание JMS MDBs В этой секции мы обсудили: 1-57
58 Практика Асинхронная обработка сообщений с помощью MDB Упражнение 1-58
59 Выводы Обработку сообщений Java Message Service Message-Driven Beans В этом модуле мы обсудили: 1-59
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.