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

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

Приложение async

Пример async демонстрирует, как определить асинхронный бизнес-метод для сессионного компонента и вызвать его из веб-клиента. Этот пример содержит два модуля.

  • Веб-приложение (async-war), которое содержит сессионный компонент без сохранения состояния и интерфейс JavaServer Faces. Сессионный компонент без состояния MailerBean определяет асинхронный метод sendMessage, который использует API JavaMail для отправки электронной почты на указанный адрес электронной почты.

  • Вспомогательная программа Java SE (async-smtpd), которая имитирует SMTP-сервер. Эта программа прослушивает TCP-порт 3025 для запросов SMTP и печатает сообщения электронной почты в стандартный вывод (вместо их доставки).

В следующем разделе описывается архитектура модуля async-war.

Архитектура модуля async-war

Модуль async-war состоит из одного сессионного компонента без сохранения состояния MailerBean и внешнего интерфейса веб-приложения JavaServer Faces, который использует теги Facelets в файлах XHTML для отображения пользователю формы ввода адреса электронной почты получателя. Статус письма обновится, когда письмо будет отправлено.

Сессионный компонент MailerBean инъецирует ресурс JavaMail, используемый для отправки сообщения электронной почты на адрес, указанный пользователем. Сообщение создаётся, изменяется и отправляется с использованием API JavaMail. Сессионный компонент выглядит так:

@Named
@Stateless
public class MailerBean {
    @Resource(name="mail/myExampleSession")
    private Session session;
    private static final Logger logger =
            Logger.getLogger(MailerBean.class.getName());

    @Asynchronous
    public Future<String> sendMessage(String email) {
        String status;
        try {
            Properties properties = new Properties();            properties.put("mail.smtp.port", "3025");            session = Session.getInstance(properties);                        Message message = new MimeMessage(session);
            message.setFrom();
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse(email, false));
            message.setSubject("Test message from async example");
            message.setHeader("X-Mailer", "JavaMail");
            DateFormat dateFormatter = DateFormat
                    .getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT);
            Date timeStamp = new Date();
            String messageBody = "This is a test message from the async "
                    + "example of the Java EE Tutorial. It was sent on "
                    + dateFormatter.format(timeStamp)
                    + ".";
            message.setText(messageBody);
            message.setSentDate(timeStamp);
            Transport.send(message);
            status = "Sent";
            logger.log(Level.INFO, "Mail sent to {0}", email);
        } catch (MessagingException ex) {
            logger.severe("Error in sending message.");
            status = "Encountered an error: " + ex.getMessage();
            logger.severe(ex.getMessage());
        }
        return new AsyncResult<>(status);
    }
}

Инъецированный ресурс JavaMail можно настроить с помощью консоли администрирования сервера GlassFish, с помощью административной команды сервера GlassFish или с помощью файла конфигурации ресурса, прилагаемого к приложению. Конфигурация ресурса может быть изменена во время выполнения администратором сервера GlassFish для использования другого почтового сервера или транспортного протокола.

Веб-клиент состоит из шаблона Facelets template.xhtml, двух страниц Facelets index.xhtml и response.xhtml и Managed-бина JavaServer Faces MailerManagedBean. Файл index.xhtml содержит форму для целевого адреса электронной почты. Когда пользователь отправляет форму, вызывается метод MailerManagedBean.send. Этот метод использует инъецированный объект сессионного компонента MailerBean для вызова MailerBean.sendMessage. Результат отправляется в представление Facelets response.xhtml.

Запуск async

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

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

Запуск приложения async с IDE NetBeans

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

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

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

    tut-install/examples/ejb
  4. Выберите каталог async, выберите «Открыть необходимые проекты» и нажмите «Открыть проект».

  5. На вкладке «Проекты» кликните правой кнопкой мыши проект async-smtpd и выберите «Выполнить».

    Симулятор SMTP-сервера начинает принимать соединения. На вкладке вывода async-smptd отображается следующее сообщение:

    [Test SMTP server listening on port 3025]
  6. На вкладке «Проекты» кликните правой кнопкой мыши проект async-war и выберите «Сборка».

    Эта команда настраивает ресурс JavaMail с помощью административной команды GlassFish Server, а также собирает, упаковывает и развёртывает модуль async-war.

  7. Откройте следующий URL в окне веб-браузера:

    http://localhost:8080/async-war
  8. В окне веб-браузера введите адрес электронной почты и нажмите «Отправить письмо».

    Бин без сохранения состояния MailerBean использует API JavaMail для доставки электронной почты на симулятор SMTP-сервера. В окне вывода async-smptd в IDE NetBeans отображается полученное сообщение электронной почты, включая его заголовки.

  9. Чтобы остановить симулятор SMTP-сервера, нажмите кнопку X в правой части строки состояния в IDE NetBeans.

  10. Удалите ресурс сессии JavaMail.

  11. На вкладке «Сервисы» разверните узел «Серверы», а затем разверните узел «Сервер GlassFish».

  12. Разверните узел «Ресурсы», затем разверните узел «Сессии JavaMail».

  13. Кликните правой кнопкой мыши mail/myExampleSession и выберите Unregister.

Запуск async с помощью Maven

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

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

    tut-install/examples/ejb/async/async-smtpd/
  3. Введите следующую команду для сборки и упаковки симулятора SMTP-сервера:

    mvn install
  4. Введите следующую команду для запуска симулятора сервера STMP:

    mvn exec:java

    Появится следующее сообщение:

    [Test SMTP server listening on port 3025]

    Держите это окно терминала открытым.

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

    tut-install/examples/ejb/async/async-war
  6. Введите следующую команду для настройки ресурса JavaMail, а также для сборки, упаковки и развёртывания модуля async-war:

    mvn install
  7. Откройте следующий URL в окне веб-браузера:

    http://localhost:8080/async-war
  8. В окне веб-браузера введите адрес электронной почты и нажмите «Отправить письмо».

    Бин без сохранения состояния MailerBean использует API JavaMail для доставки электронной почты на симулятор SMTP-сервера. Полученное сообщение электронной почты появляется в первом окне терминала, включая его заголовки.

  9. Чтобы остановить симулятор SMTP-сервера, закройте окно терминала, в котором вы дали команду на запуск симулятора STMP-сервера.

  10. Чтобы удалить ресурс сессии JavaMail, введите следующую команду:

    asadmin delete-javamail-resource mail/myExampleSession

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