@EJB(name="PublisherRemote")
private static PublisherRemote publisher;
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
В этом разделе объясняется, как написать, скомпилировать, упаковать, развернуть и запустить приложение, которое использует JMS API в сочетании с сессионным компонентом. Приложение содержит следующие компоненты:
Клиентское приложение, которое вызывает сессионный компонент
Сессионный компонент, который публикует несколько сообщений в теме
Компонент, управляемый сообщениями, который получает и обрабатывает сообщения, используя долговременную подписку на тему и селектор сообщений
Исходные файлы для этого раздела находятся в каталоге tut-install/examples/jms/clientsessionmdb/
. Пути в этом разделе относятся к этому каталогу.
Здесь рассматриваются следующие темы:
Это приложение демонстрирует, как отправлять сообщения из Enterprise-бина (в данном случае из сессионного компонента), а не из клиентского приложения, как в примере в Асинхронный приём сообщений с использованием бина, управляемого сообщениями. Рисунок 49-4 иллюстрирует структуру этого приложения. Отправка сообщений из Enterprise-бина очень похожа на отправку сообщений из Managed-бина, что было показано в Отправка и получение сообщений в простом веб-приложении.
В этом примере Enterprise-бин Publisher представляет собой эквивалент корпоративного приложения для новостной ленты сервиса, которая разбивает новостные события на шесть новостных категорий. Компонент, управляемый сообщениями, может представлять новостное отделение, где, например, спортивная колонка будет устанавливать подписку на все новостные события, относящиеся к спорту.
Клиентское приложение в этом примере инъецирует удалённый домашний интерфейс Enterprise-бина Publisher и затем вызывает бизнес-метод компонента. Enterprise-бин создаёт 18 текстовых сообщений. Для каждого сообщения он случайным образом устанавливает свойство String
категории новостей в одно из шести значений, а затем публикует сообщение в теме. Компонент, управляемый сообщениями, использует селектор сообщений для ограничения количества опубликованных сообщений, которое будет ему доставлено.
Клиентское приложение MyAppClient.java
, находящееся в clientsessionmdb-app-client
, не выполняет операций JMS API и поэтому устроено проще, чем клиент в Асинхронном приёме сообщений с использованием бина, управляемого сообщениями. Клиент использует инъецирование зависимостей для получения бизнес-интерфейса Enterprise-бина Publisher:
@EJB(name="PublisherRemote")
private static PublisherRemote publisher;
Затем клиент дважды вызывает бизнес-метод компонента.
Бин Publisher — это сессионный компонент без сохранения состояния, имеющий один бизнес-метод. Бин Publisher использует удалённый, а не локальный интерфейс, поскольку к нему обращается клиентское приложение.
Удалённый интерфейс PublisherRemote.java
, расположенный в clientsessionmdb-ejb
, объявляет один бизнес-метод publishNews
.
Класс бинов PublisherBean.java
, также находящийся в clientsessionmdb-ejb
, реализует метод publishNews
и его вспомогательный метод chooseType
. Класс бина инъецирует ресурсы SessionContext
и Topic
(тема определена в бине, управляемом сообщениями). Затем он инъецирует JMSContext
, который использует предустановленную фабрику соединений по умолчанию, если не указано иное. Класс бина начинается следующим образом:
@Stateless
@Remote({
PublisherRemote.class
})
public class PublisherBean implements PublisherRemote {
@Resource
private SessionContext sc;
@Resource(lookup = "java:module/jms/newsTopic")
private Topic topic;
@Inject
private JMSContext context;
...
Бизнес-метод publishNews
создаёт JMSProducer
и публикует сообщения.
Класс управляемого сообщениями бина MessageBean.java
, найденный в clientsessionmdb-ejb
, практически идентичен классу в Асинхронном приёме сообщений с использованием бина, управляемого сообщениями. Однако аннотация @MessageDriven
отличается, потому что вместо очереди компонент использует тему, долговременную подписку и селектор сообщений. Бин определяет тему для использования приложения. Определение использует область видимости java:module
, поскольку и сессионный компонент, и управляемый сообщениями компонент находятся в одном и том же модуле. Поскольку назначение определяется в бине, управляемом сообщениями, аннотация @MessageDriven
использует свойство конфигурации активации destinationLookup
. (См. Создание ресурсов для приложений Java EE для получения дополнительной информации.) Аннотация также устанавливает свойства конфигурации активации messageSelector
, subscriptionDurability
, clientId
и subscriptionName
следующим образом:
@JMSDestinationDefinition(
name = "java:module/jms/newsTopic",
interfaceName = "javax.jms.Topic",
destinationName = "PhysicalNewsTopic")
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationLookup",
propertyValue = "java:module/jms/newsTopic"),
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "messageSelector",
propertyValue = "NewsType = 'Sports' OR NewsType = 'Opinion'"),
@ActivationConfigProperty(propertyName = "subscriptionDurability",
propertyValue = "Durable"),
@ActivationConfigProperty(propertyName = "clientId",
propertyValue = "MyID"),
@ActivationConfigProperty(propertyName = "subscriptionName",
propertyValue = "MySub")
})
Тема определена в PublisherBean
. Селектор сообщений в этом случае представляет как спортивные, так и аналитические колонки для демонстрации синтаксиса селекторов сообщений.
Адаптер ресурсов JMS использует эти свойства для создания фабрики соединений для бина, управляемого сообщениями, который позволяет бину использовать долговременную подписку.
Вы можете использовать IDE NetBeans или Maven для сборки, развёртывания и запуска примера simplemessage
.
В этом примере используется тема, заданная аннотацией, и предустановленная фабрика соединений по умолчанию java:comp/DefaultJMSConnectionFactory
, поэтому не требуется создавать ресурсы для неё.
Здесь рассматриваются следующие темы:
Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).
В меню «Файл» выберите «Открыть проект».
В диалоговом окне «Открыть проект» перейдите к:
tut-install/examples/jms/clientsessionmdb
Выберите каталог clientsessionmdb
.
Убедитесь, что установлен флажок «Открыть требуемые проекты», затем нажмите «Открыть проект».
На вкладке «Проекты» кликните правой кнопкой мыши проект clientsessionmdb
и выберите «Сборка». (В среде IDE NetBeans требуется установить флажок для запуска предварительной сборки.)
Эта команда создаёт следующее:
JAR-файл клиентского приложения, содержащий файл класса клиента и удалённый интерфейс сессионного компонента, а также файл манифеста, который задаёт основной класс и помещает файл EJB JAR в его classpath.
Файл EJB JAR, который содержит как сессионный компонент, так и управляемый сообщениями компонент
EAR-файл приложения, содержащий два файла JAR
Файл clientsessionmdb.ear
создаётся в каталоге clientsessionmdb-ear/target/
.
Затем команда развёртывает файл EAR, извлекает клиентские заглушки и запускает клиентское приложение.
Клиент отображает эти строки:
To view the bean output,
check <install_dir>/domains/domain1/logs/server.log.
Вывод Enterprise-бинов отображается в файле журнала сервера. Сессионный компонент Publisher отправляет два набора по 18 сообщений, пронумерованных с 0
Из-за селектора сообщений бин, управляемый сообщениями, получает только те сообщения, у которых свойство NewsType
имеет значение Sports
или Opinion
.
Используйте вкладку «Сервисы» чтобы удалить приложения после завершения его работы.
Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).
Перейдите в следующий каталог:
tut-install/examples/jms/clientsessionmdb/
Чтобы скомпилировать исходные файлы и пакет, развернуть и запустить приложение, введите следующую команду:
mvn install
Эта команда создаёт следующее:
JAR-файл клиентского приложения, содержащий файл класса клиента и удалённый интерфейс сессионного компонента, а также файл манифеста, который задаёт основной класс и помещает файл EJB JAR в его classpath.
Файл EJB JAR, который содержит как сессионный компонент, так и управляемый сообщениями компонент
EAR-файл приложения, содержащий два файла JAR
Файл clientsessionmdb.ear
создаётся в каталоге clientsessionmdb-ear/target/
.
Затем команда развёртывает файл EAR, извлекает клиентские заглушки и запускает клиентское приложение.
Клиент отображает эти строки:
To view the bean output,
check <install_dir>/domains/domain1/logs/server.log.
Вывод Enterprise-бинов отображается в файле журнала сервера. Сессионный компонент Publisher отправляет два набора по 18 сообщений, пронумерованных с 0
Из-за селектора сообщений бин, управляемый сообщениями, получает только те сообщения, у которых свойство NewsType
имеет значение Sports
или Opinion
.
Удалите приложение после того, как вы закончили его выполнение:
mvn cargo:undeploy
Назад | Вперёд | Содержание |