@Resource(name="java:comp/DefaultManagedExecutorService")
ManagedExecutorService mExecService;
@Resource(name="java:comp/DefaultManagedScheduledExecutorService")
ManagedScheduledExecutorService sExecService;
|
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
| Назад | Вперёд | Содержание |
Пример 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.

Класс 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 с IDE NetBeans или Maven.
Здесь рассматриваются следующие темы:
Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).
В меню «Файл» выберите «Открыть проект».
В диалоговом окне «Открыть проект» перейдите к:
tut-install/examples/concurrency
Выберите каталог taskcreator.
Нажмите Открыть проект.
На вкладке «Проекты» кликните правой кнопкой мыши проект taskcreator и выберите «Сборка».
Эта команда собирает и развёртывает приложение.
Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).
В окне терминала перейдите в:
tut-install/examples/concurrency/taskcreator
Введите следующую команду, чтобы собрать и развернуть приложение:
mvn install
Откройте следующий URL в веб-браузере:
http://localhost:8080/taskcreator/
Страница содержит форму для отправки заданий, журнал их выполнения и форму для отмены периодических заданий.
Выберите тип задания «Немедленно», введите имя задания и нажмите кнопку «Отправить». Сообщения, подобные следующим, появляются в журнале выполнения задания:
IMMEDIATE Task TaskA started
IMMEDIATE Task TaskA finished
Выберите тип задания с задержкой (3 секунды), введите имя задания и нажмите кнопку «Отправить». Сообщения, подобные следующим, появляются в журнале выполнения задания:
DELAYED Task TaskB submitted
DELAYED Task TaskB started
DELAYED Task TaskB finished
Выберите тип периодического (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
Вы можете добавить более одного периодического задания. Чтобы отменить периодическое задание, выберите его в форме и нажмите «Отменить задание».
| Назад | Вперёд | Содержание |
Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены.
Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)