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

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

Пример taskcreator

Пример taskcreator демонстрирует, как использовать утилиты параллелизма Java EE для запуска задач незамедлительно, периодически или после фиксированной задержки. В этом примере представлен интерфейс JavaServer Faces, который позволяет пользователям отправлять задания для выполнения и отображает информационные сообщения для каждого задания. В этом примере управляемый ExecutorService используется для немедленного запуска заданий, а управляемый ScheduledExecutorService — для запуска периодических заданий или заданий с фиксированной задержкой. (См. Основные компоненты утилит параллелизма для получения информации об этих сервисах.)

Пример taskcreator состоит из следующих компонентов.

  • Страница JavaServer Faces (index.xhtml), которая содержит три элемента: форму для отправки заданий, журнал их выполнения и форму для отмены периодических заданий. Эта страница отправляет Ajax-запросы для создания и отмены заданий. Она также получает сообщения веб-сокетов, используя код JavaScript для обновления журнала выполнения заданий.

  • Managed-бин CDI (TaskCreatorBean), который обрабатывает запросы со страницы JavaServer Faces. Этот компонент вызывает методы из TaskEJB для отправки новых заданий и отмены периодических заданий.

  • Enterprise-бин (TaskEJB), который получает объекты ExecutorService-а, используя инъецирование ресурсов, и отправляет задания на выполнение. Этот компонент также является конечной точкой веб-сервиса JAX-RS. Задачи отправляют информационные сообщения этой конечной точке.

  • Конечная точка веб-сокета (InfoEndpoint), используемая Enterprise-бином для отправки информационных сообщений клиентам.

  • Класс задач (Task), реализующий интерфейс Runnable. Метод run в этом классе отправляет информационные сообщения конечной точке веб-сервиса в TaskEJB и засыпает на 1,5 секунды.

На рисунке 59-1 показана архитектура примера taskcreator.

Рис. 59-1. Архитектура taskcreator

На рисунке показана архитектура taskcreator. Страница JavaServer Faces вызывает методы для Managed-бина CDI, который отправляет запросы для инициирования заданий Enterprise-бину. Enterprise-бин использует конечную точку веб-сокета, чтобы указать клиентам, что доступен обновлённый журнал выполнения заданий.

Класс TaskEJB получает объекты ExecutorService по умолчанию с сервера приложений следующим образом:

@Resource(name="java:comp/DefaultManagedExecutorService")
ManagedExecutorService mExecService;

@Resource(name="java:comp/DefaultManagedScheduledExecutorService")
ManagedScheduledExecutorService sExecService;

Метод submitTask в TaskEJB использует эти объекты для отправки задач на выполнение следующим образом:

public void submitTask(Task task, String type) {
    /* Использование ManagedExecutorService сервера приложений */
    switch (type) {
        case "IMMEDIATE":
            mExecService.submit(task);
            break;
        case "DELAYED":
            sExecService.schedule(task, 3, TimeUnit.SECONDS);
            break;
        case "PERIODIC":
            ScheduledFuture fut;
            fut = sExecService.scheduleAtFixedRate(task, 0, 8,
                    TimeUnit.SECONDS);
            periodicTasks.put(task.getName(), fut);
            break;
    }
}

Для периодических задач TaskEJB хранит ссылку на объект ScheduledFuture, чтобы пользователь мог отменить задание в любое время.

Запуск taskcreator

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

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

Сборка, упаковка и развёртывание taskcreator с IDE NetBeans

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

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

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

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

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

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

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

Сборка, упаковка и развёртывание taskcreator с использованием Maven

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

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

    tut-install/examples/concurrency/taskcreator
  3. Введите следующую команду, чтобы собрать и развернуть приложение:

    mvn install

Запуск taskcreator

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

    http://localhost:8080/taskcreator/

    Страница содержит форму для отправки заданий, журнал их выполнения и форму для отмены периодических заданий.

  2. Выберите тип задания «Немедленно», введите имя задания и нажмите кнопку «Отправить». Сообщения, подобные следующим, появляются в журнале выполнения задания:

    IMMEDIATE Task TaskA started
    IMMEDIATE Task TaskA finished
  3. Выберите тип задания с задержкой (3 секунды), введите имя задания и нажмите кнопку «Отправить». Сообщения, подобные следующим, появляются в журнале выполнения задания:

    DELAYED Task TaskB submitted
    DELAYED Task TaskB started
    DELAYED Task TaskB finished
  4. Выберите тип периодического (8 секунд) задания, введите имя задания и нажмите кнопку «Отправить». Сообщения, подобные следующим, появляются в журнале выполнения задания:

    PERIODIC Task TaskC started run #1
    PERIODIC Task TaskC finished run #1
    PERIODIC Task TaskC started run #2
    PERIODIC Task TaskC finished run #2

    Вы можете добавить более одного периодического задания. Чтобы отменить периодическое задание, выберите его в форме и нажмите «Отменить задание».


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