Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Отправка и получение сообщений в простом веб-приложении

Веб-приложения могут использовать JMS API для отправки и получения сообщений, как отмечено в Использование компонентов Java EE для отправки и синхронного получения сообщений. В этом разделе описываются компоненты очень простого веб-приложения, использующего JMS API.

В этом разделе предполагается, что вы знакомы с основами JavaServer Faces, описанной в части III «Веб-слой».

Пример websimplemessage находится в каталоге tut-install/jms/examples/. Для отправки и получения он использует страницы Facelets, а также соответствующие вспомогательные бины. Когда пользователь вводит сообщение в текстовое поле отправляющей страницы и кликает кнопку, вспомогательный компонент для страницы отправляет сообщение в очередь и отображает его на странице. Когда пользователь переходит на принимающую страницу и кликает другую кнопку, вспомогательный компонент для этой страницы получает сообщение синхронно и отображает его.

Рис. 49-2. Приложение простого веб-приложения

Диаграмма, показывающая веб-приложение, в котором Managed-бин отправляет сообщение в очередь, а другой Managed-бин получает сообщение из очереди.

Страницы Facelets websimplemessage

Страницы Facelets для примера следующие.

  • sender.xhtml, который предоставляет помеченный тег h:inputText, в который пользователь вводит сообщение, вместе с двумя командными кнопками. Когда пользователь кликает кнопку «Отправить сообщение», вызывается метод senderBean.sendMessage, чтобы отправить сообщение в очередь и отобразить его содержимое. Когда пользователь кликает кнопку «Перейти к странице получения», появляется страница receiver.xhtml.

  • receive.xhtml, который также предоставляет две кнопки управления. Когда пользователь кликает кнопку «Получить сообщение», вызывается метод receiveBean.getMessage, чтобы извлечь сообщение из очереди и отобразить его содержимое. Когда пользователь кликает кнопку «Отправить другое сообщение», страница sender.xhtml появляется снова.

Managed-бины websimplemessage

Два Managed-бина для примера следующие.

  • SenderBean.java, Managed-бин CDI со свойством messageText и бизнес-методом sendMessage. Класс аннотируется @JMSDestinationDefinition для создания очереди для компонента:

    @JMSDestinationDefinition(
            name = "java:comp/jms/webappQueue",
            interfaceName = "javax.jms.Queue",
            destinationName = "PhysicalWebappQueue")
    @Named
    @RequestScoped
    public class SenderBean {

    Метод sendMessage инъецирует JMSContext (используя фабрику соединений по умолчанию) и очередь, создаёт производителя, отправляет сообщение, введённое пользователем на странице Facelets и создаёт FacesMessage для отображения на странице Facelets:

    @Inject
    private JMSContext context;
    @Resource(lookup = "java:comp/jms/webappQueue")
    private Queue queue;
    private String messageText;
    ...
    public void sendMessage() {
        try {
            String text = "Message from producer: " + messageText;
            context.createProducer().send(queue, text);
    
            FacesMessage facesMessage =
                    new FacesMessage("Sent message: " + text);
            FacesContext.getCurrentInstance().addMessage(null, facesMessage);
        } catch (Throwable t) {
            logger.log(Level.SEVERE,
                    "SenderBean.sendMessage: Exception: {0}",
                    t.toString());
        }
    }
  • ReceiverBean.java, Managed-бин CDI с бизнес-методом getMessage. Метод инъецирует JMSContext (используя фабрику соединений по умолчанию) и очередь, которая была определена в SenderBean, создаёт получателя, получает сообщение и создаёт FacesMessage для отображения на странице Facelets:

    @Inject
    private JMSContext context;
    @Resource(lookup = "java:comp/jms/webappQueue")
    private Queue queue;
    ...
    public void getMessage() {
        try {
            JMSConsumer receiver = context.createConsumer(queue);
            String text = receiver.receiveBody(String.class);
    
            if (text != null) {
                FacesMessage facesMessage =
                        new FacesMessage("Reading message: " + text);
                FacesContext.getCurrentInstance().addMessage(null, facesMessage);
            } else {
                FacesMessage facesMessage =
                        new FacesMessage("No message received after 1 second");
                FacesContext.getCurrentInstance().addMessage(null, facesMessage);
            }
        } catch (Throwable t) {
            logger.log(Level.SEVERE,
                    "ReceiverBean.getMessage: Exception: {0}",
                    t.toString());
        }
    }

Запуск websimplemessage

Вы можете использовать IDE NetBeans или Maven для создания, упаковки, развёртывания и запуска приложения websimplemessage.

Здесь рассматриваются следующие темы:

Создание ресурсов для websimplemessage

В этом примере используется очередь, заданная аннотацией, и предустановленная фабрика соединений по умолчанию java:comp/DefaultJMSConnectionFactory.

Упаковка и развёртывание веб-сайта с IDE NetBeans

  1. Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).

  2. В меню «Файл» выберите «Открыть проект».

  3. В диалоговом окне «Открыть проект» перейдите к:

    tut-install/examples/jms
  4. Выберите каталог websimplemessage.

  5. Нажмите Открыть проект.

  6. На вкладке «Проекты» кликните правой кнопкой мыши проект websimplemessage и выберите «Сборка».

    Эта команда собирает и развёртывает проект.

Упаковка и развёртывание веб-сайта с использованием Maven

  1. Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).

  2. В окне терминала перейдите в:

    tut-install/examples/jms/websimplemessage/
  3. Чтобы скомпилировать исходные файлы, упаковать и развернуть приложение, используйте следующую команду:

    mvn install

Запуск websimplemessage

  1. В веб-браузере введите следующий URL:

    http://localhost:8080/websimplemessage
  2. Введите сообщение в текстовое поле и нажмите «Отправить сообщение».

    Например, если вы введёте «Hello, Duke», под кнопками появится следующее:

    Sent message: Message from producer: Hello, Duke
  3. Нажмите Перейти на страницу получения.

  4. Нажмите Получить сообщение.

    Следующее появляется под кнопками:

    Reading message: Message from producer: Hello, Duke
  5. Нажмите «Отправить другое сообщение», чтобы вернуться на страницу отправки.

  6. После завершения работы приложения удалите его, используя вкладку «Службы» в среде IDE NetBeans или команду mvn cargo:undeploy.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)