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

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

Пример jobs

В этом разделе описан очень простой пример, который показывает, как использовать некоторые функции параллелизма в корпоративном приложении. В частности, в этом примере используется один из основных компонентов утилит параллелизма в Java EE — управляемый ExecutorService.

В этом примере демонстрируется сценарий, в котором RESTful веб-сервис, предоставляющий общедоступный API, используется для отправки заданий на выполнение. Эти задания обрабатываются в фоновом режиме. Каждое задание выводит сообщение «Starting» в начале выполнения и «Finished» — в конце. Кроме того, для имитации фоновой обработки каждое задание занимает 10 секунд.

RESTful сервис предоставляет два метода:

  • /token: предоставляется как метод GET, который регистрирует и возвращает валидные токены API

  • /process: предоставляется как метод POST, получающий параметр запроса jobID, являющийся идентификатором задания для выполнения, и настраиваемый заголовок HTTP с именем X-REST-API-Key, который будет использоваться для внутренней проверки запросов с токенами

Маркер используется для предоставления обслуживания разного качества (QoS), предлагаемого API. Пользователи, предоставляющие токен в запросе на обслуживание, могут обрабатывать несколько одновременных заданий. Однако пользователи, которые не предоставляют токен, могут одновременно обрабатывать только одно задание. Поскольку на выполнение каждого задания уходит 10 секунд, пользователи, не предоставляющие токен, смогут выполнять только один вызов службы каждые 10 секунд. Для пользователей, предоставляющих токен, обработка будет идти намного быстрее.

Такое разграничение стало возможным благодаря использованию двух разных управляемых ExecutorService-ов, по одному для каждого типа запроса.

Пример выполнения работ

После настройки GlassFish Server путём добавления двух управляемых ExecutorService-ов вы можете использовать IDE NetBeans или Maven для сборки, упаковки, развёртывания и запуска примера jobs.

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

Настройка сервера GlassFish для базового примера параллелизма

Чтобы настроить сервер GlassFish, выполните следующие действия.

  1. Откройте Консоль администрирования по ссылке http://localhost:4848.

  2. Разверните узел Ресурсы.

  3. Разверните узел «Ресурсы параллелизма».

  4. Нажмите управляемые ExecutorService-ы.

  5. На странице управляемых ExecutorService-ов нажмите Создать, чтобы открыть страницу Создание управляемого ExecutorService-а.

  6. В поле Имя JNDI введите MES_High, чтобы создать высокоприоритетный управляемый ExecutorService. Используйте следующие настройки (оставьте значения по умолчанию для других настроек):

    • Приоритет потока: 10

    • Количество ядер: 2

    • Максимальный размер пула: 5

    • Ёмкость очереди задач: 2

  7. Нажмите ОК.

  8. На странице «Управляемые ExecutorService-ы» снова нажмите «Создать».

  9. В поле Имя JNDI введите MES_Low, чтобы создать управляемый ExecutorService-а приоритетом. Используйте следующие настройки (оставьте значения по умолчанию для других настроек):

    • Приоритет потока: 1

    • Количество ядер: 1

    • Максимальный размер пула: 1

    • Ёмкость очереди задач: 0

  10. Нажмите ОК.

Пример создания, упаковки и развёртывания jobs с IDE NetBeans

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

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

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

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

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

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

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

Пример создания, упаковки и развёртывания jobs с использованием Maven

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

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

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

    mvn install

Запуск примера jobs и отправка заданий с низким приоритетом

Чтобы запустить пример как пользователь, который отправляет задания с низким приоритетом, выполните следующие действия:

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

    http://localhost:8080/jobs
  2. На странице «Клиент задания» введите значение 1 в поле «Ввести идентификатор задания», ничего не вводите в поле «Ввести токен» и нажмите «Отправить задание».

    Следующее сообщение должно отображаться внизу страницы:

    Job 1 successfully submitted

    Журнал сервера включает в себя следующие сообщения:

    INFO:   Invalid or missing token!
    INFO:   Task started LOW-1
    INFO:   Job 1 successfully submitted
    INFO:   Task finished LOW-1

    Вы отправили работу с низким приоритетом. Это означает, что вы не можете отправить другую работу в течение 10 секунд. Если вы попытаетесь это сделать, RESTful API вернёт ответ «Служба недоступна» (HTTP 503), а в нижней части страницы будет показано следующее сообщение:

    Job 2 was NOT submitted

    Журнал сервера будет содержать следующие сообщения:

    INFO:   Invalid or missing token!
    INFO:   Job 1 successfully submitted
    INFO:   Task started LOW-1
    INFO:   Invalid or missing token!
    INFO:   Job 2 was NOT submitted
    INFO:   Task finished LOW-1

Запуск примера jobs и отправка заданий с высоким приоритетом

Чтобы запустить пример как пользователь, который отправляет задания с высоким приоритетом, выполните следующие действия:

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

    http://localhost:8080/jobs
  2. На странице «Клиент задания» введите значение от одной до десяти цифр в поле «Введите идентификатор задания».

  3. Нажмите на ссылку здесь в строке «Получить токен здесь», чтобы получить токен. Страница, на которой отображается токен, откроется в новой вкладке.

  4. Скопируйте токен и вернитесь на страницу клиента заданий.

  5. Вставьте токен в поле «Введите токен», затем нажмите «Отправить задание».

    Сообщение, подобное следующему, должно отображаться внизу страницы:

    Job 11 successfully submitted

    Журнал сервера включает в себя следующие сообщения:

    INFO:   Token accepted. Execution with high priority.
    INFO:   Task started HIGH-11
    INFO:   Job 11 successfully submitted
    INFO:   Task finished HIGH-11

    Вы представили задание с высоким приоритетом. Это означает, что вы можете отправлять несколько заданий, каждое с токеном, и не сталкиваться с ограничением в 10 секунд на задание, с которым сталкиваются отправители с низким приоритетом. Если вы отправите 3 задания с токенами в быстрой последовательности, в нижней части страницы будут отображаться сообщения, подобные следующим:

    Job 1 was submitted
    Job 2 was submitted
    Job 3 was submitted

    Журнал сервера будет содержать следующие сообщения:

    INFO:   Token accepted. Execution with high priority.
    INFO:   Task started HIGH-1
    INFO:   Job 1 successfully submitted
    INFO:   Token accepted. Execution with high priority.
    INFO:   Task started HIGH-2
    INFO:   Job 2 successfully submitted
    INFO:   Task finished HIGH-1
    INFO:   Token accepted. Execution with high priority.
    INFO:   Task started HIGH-3
    INFO:   Job 3 successfully submitted
    INFO:   Task finished HIGH-2
    INFO:   Task finished HIGH-3

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