@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
Вы можете добавить более одного периодического задания. Чтобы отменить периодическое задание, выберите его в форме и нажмите «Отменить задание».
Назад | Вперёд | Содержание |