Evgeniy Krivosheev Last update: March, 2012 Spring Framework Module 10 – JMS, EJB
2 Содержание Поддержка JMS в Spring Поддержка EJB в Spring
3 Spring :: JMS :: JmsTemplate JMS – Java Messaging Service: обмен сообщениями Взаимодействие «издание-подписка» Взаимодействие «точка-точка»
4 Spring :: JMS :: JmsTemplate Для работы с JMS используется класс JmsTemplate - вспомогательный класс, для доступа к JMS ; Для JmsTemplate необходима ссылка на ConnectionFactory ConnectionFactory : Объект из контракта JMS; Получается из JNDI; Используется клиентским приложением для создания соединения с JMS- провайдером; Включает в себя множество конфигурационных параметров;
5 Spring :: JMS :: JmsTemplate Конфигурация connecionFactory и jmsTemplate:
6 Spring :: JMS :: JmsTemplate Destination: Объект из контракта JMS; Получается из JNDI; Часто известен только во время выполнения; DestinationResolver : Для определения Destination во время выполнения; Отправка сообщения:
7 Spring :: JMS :: Пример Синхронное получение сообщения:
8 Spring :: JMS Message Listener: регистрация и получение сообщений; управление ресурсами; участие в транзакциях; обработка исключений; простейшая реализация – SimpleMessageListenerContainer Асинхронное получение сообщения:
9 Spring :: EJB
10 Spring :: EJB
11 Spring :: Поддержка EJB Spring рассматривается как альтернатива EJB ; Но эти технологии можно использовать совместно; Spring упрощает работу с EJB ; При работе с EJB возникает проблема тестирования ; Необходимо получать бины из JNDI и вызывать метод create() ; Spring упрощает процесс тестирования ; Позволяет декларативно конфигурировать объекты ;
12 Spring :: Поддержка EJB Spring Framework поддерживает: EJB 2. x ; EJB 3. x ; При обращении к EJB, нет необходимости точно знать версию – Spring сам определит с какой версией EJB работает ; Для EJB 3, можно использовать не специфичный для EJB способ вызова, а получить объект из JNDI ; Все примеры приведены для версии EJB 2. x ;
13 Spring :: EJB :: Пример Бизнес-интерфейс Контроллер
14 Spring :: EJB :: Пример Кофигурация local interface
15 Spring :: EJB :: Пример Кофигурация remote interface
16 Spring :: EJB :: Достоинства При необходимости заменить EJB на POJO или mock объект необходимо изменить только конфигурацию, не меняя Java код ; Также нет необходимости писать код поиска в JNDI и другой «служебный код» ; Однотипность обращения к local и remote EJB - нет необходимости обрабатывать RemoteException в бизнес-методах для remote EJB ; При возникновении RemoteException во время вызова удаленного бина, выбрасывается non-checked RemoteAccessException ;
17 Spring :: EJB :: Особенности Proxy-класс для EJB - singleton (нет необходимости в prototype) ; Многие реализации контейнеров бинов пре-инициализируют singletonы ; Может быть попытка создать proxy объект для которого еще не создан EJB ; Объект создается один раз в методе init(), а потом кэшируется ; Решение – НЕ пре-инициализировать объекты, а создавать их по первому запросу ; Это задается атрибутом lazy-init ; Транзакции обеспечиваются J2EE контейнером, Spring обеспечивает только вызов методов EJB ;
18 Spring :: EJB или Spring? ТехнологияEJBSpring Поддрежка транзакций Поддерживаются только атрибуты транзакций. Поддреживаются как атрибуты транзакций, так и уровни изоляции. Транзакции могут быть вложенными. Постоянство Использование аннотаций JPA Поддержка JPA, Hibernate, JDBC, iBatis Управление транзакциями Только JTAПоддержка JTA, JDBC, Hibernate Управление состоянием Полная поддержка через Stateful Session Bean Непрямая поддержка через управление Web-сессиями. Сообщения Полная поддержка JMSПоддержка JMS через JMSTemplate AOPОграниченная поддержка через интерцепторы Полная поддержка через AspectJ и Spring AOP Распределенная работа Интегрированная поддержка, обеспечивается сервером Может быть добавлена ограниченная поддержка. Имплементация Стандарт; множество серверов приложений Одна имплементация; не стандарт
19 Вопросы!?