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

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

Введение в пакетную обработку

Некоторые корпоративные приложения содержат задачи, которые могут быть выполнены без взаимодействия с пользователем. Эти задачи выполняются периодически или при низком использовании ресурсов, и они часто обрабатывают больши́е объёмы информации, такие как файлы журналов, записи базы данных или изображения. Например, выставление счетов, генерация отчётов, преобразование формата данных и обработка изображений. Эти задачи называются пакетными заданиями.

Пакетная обработка относится к запуску пакетных заданий в компьютерной системе. Java EE содержит фреймворк пакетной обработки, который обеспечивает инфраструктурную поддержку выполнения пакетных приложений и позволяет разработчикам сосредоточиться на бизнес-логике. Фреймворк пакетной обработки состоит из языка спецификации задания на основе XML, набора аннотаций пакета и интерфейсов для классов приложений, реализующих бизнес-логику, контейнера пакета, управляющего выполнением пакетных заданий, и поддержки классов и интерфейсов для взаимодействия с контейнером.

Пакетное задание может быть выполнено без вмешательства пользователя. Например, рассмотрим приложение для выставления счетов по телефону, которое считывает записи телефонных звонков из информационных систем предприятия и генерирует ежемесячный счёт для каждой учётной записи. Поскольку это приложение не требует взаимодействия с пользователем, оно может запускаться как пакетное задание.

Приложение для выставления счетов по телефону состоит из двух фаз: на первой фазе каждый звонок из реестра связывается с ежемесячным счётом, на второй фазе рассчитываются налог и общая сумма, причитающиеся за каждый счёт. Каждая из этих фаз является шагом пакетного задания.

Пакетные приложения определяют набор шагов и порядок их выполнения. Различные фреймворки пакетной обработки могут указывать дополнительные элементы, такие как элементы решения или группы шагов, которые выполняются параллельно. В следующих разделах шаги описываются более подробно и предоставляется информация о других общих характеристиках фреймворка пакетной обработки.

Шаги в пакетных заданиях

Шаг — это независимая и последовательная фаза пакетного задания. Пакетные задания содержат шаги, ориентированные на обработку фрагментов данных, и шаги, ориентированные на задачи.

  • Ориентированные на обработку фрагментов данных шаги (шаги фрагментов) обрабатывают данные путём чтения элементов из источника данных, применения некоторой бизнес-логики к каждому элементу и сохранения результатов. Шаги фрагментов читают и обрабатывают один элемент за раз и группируют фрагмент с результатами. Результаты сохраняются, когда фрагмент достигает заранее установленного размера. Ориентированная на фрагменты обработка делает хранение результатов более эффективным и облегчает разграничение транзакций.

    Шаги фрагментов состоят из трёх частей.

    • Часть извлечения ввода считывает один элемент за раз из источника данных, например записи в базе данных, файлы в каталоге или записи в файле журнала.

    • Часть бизнес-обработки управляет одним элементом за раз, используя бизнес-логику, определённую приложением. Например, фильтрация, форматирование и доступ к данным из элемента для вычисления результата.

    • Часть записи вывода хранит фрагмент одновременно обработанных элементов.

      Шаги фрагментов часто выполняются длительное время, поскольку обрабатывают большие объёмы данных. Фреймворки пакетной обработки позволяют шагам фрагментов отмечать прогресс по контрольным точкам. Прерванный шаг фрагмента может быть перезапущен с последней контрольной точки. Части извлечения ввода и записи вывода шага фрагмента сохраняют свою текущую позицию после обработки каждого фрагмента и могут восстанавливать его после перезапуска шага.

      На рисунке 58-1 показаны три части двух шагов в пакетном задании.

      Рис. 58-1. Шаги в пакетном задании

      На этом рисунке показано пакетное задание, которое содержит два шага фрагментов: шаг A и шаг B. Шаг A состоит из трёх частей, ориентированных на обработку фрагмента данных: извлечение ввода A, бизнес-обработка A и запись вывода A. В шаге B также есть три части: извлечение ввода B, бизнес-обработка B и запись вывода B.

Например, приложение для выставления счетов за телефон состоит из двух фрагментов.

  • На первом этапе часть извлечения ввода считывает записи вызовов из реестра. Часть бизнес-обработки связывает каждый вызов со счётом и создаёт счёт, если он не существует для учётной записи. Часть записи вывода сохраняет каждый счёт в базе данных.

  • На втором шаге часть извлечения ввода считывает счета из базы данных. Часть бизнес-обработки вычисляет налог и общую сумму, причитающуюся за каждый счёт. Часть записи вывода обновляет записи базы данных и генерирует печатные версии каждого счёта.

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

Параллельная обработка

Пакетные задания часто обрабатывают большие объёмы данных или выполняют дорогие в вычислительном отношении операции. Пакетные приложения могут выиграть от параллельной обработки в двух случаях.

  • Шаги, которые не зависят друг от друга, могут выполняться в разных потоках (thread).

  • Ориентированные на фрагменты шаги, на которых обработка каждого элемента не зависит от результатов обработки предыдущих элементов, могут выполняться более чем в одном потоке (thread).

Фреймворки пакетной обработки предоставляют разработчикам механизмы для определения групп независимых шагов и разделения ориентированных на фрагменты шагов на части, которые могут выполняться параллельно.

Элементы статуса и принятия решения

Фреймворки пакетной обработки отслеживают статус для каждого шага в задании. Статус указывает, выполняется шаг или завершён. Если шаг завершён, статус имеет одно из следующих значений:

  • Выполнение шага прошло успешно.

  • Шаг был прерван.

  • Произошла ошибка при выполнении шага.

Дополнительно к шагам пакетные задания могут также содержать элементы принятия решения. Элементы принятия решения используют статус выхода предыдущего шага, чтобы определить следующий шаг или завершить выполнение пакетного задания. Элементы принятия решения устанавливают статус пакетного задания при его завершении. Как и шаг, пакетное задание может завершиться успешно, с ошибкой или быть прервано.

На рисунке 58-2 показан пример задания, которое содержит шаги фрагментов, шаги задач и элемент принятия решения.

Рис. 58-2. Шаги и элементы принятия решения в задании

На этом рисунке показано пакетное задание, которое содержит два шага фрагментов, шаг задачи и элемент принятия решения. Задание начинается с шага A обработки фрагмента, продолжается шагом B обработки фрагмента, а затем элемент D принятия решения оценивает условие 1. Условие основано на состоянии шага B. Если условие 1 истинно, задание завершается. В противном случае работа продолжается с шага C, а затем работа заканчивается.

Функциональность фреймворка пакетной обработки

К пакетным приложениям предъявляются следующие требования:

  • Определение задания, шагов, элементов принятия решения и отношений между ними.

  • Выполнение несколько групп шагов или частей шага параллельно.

  • Сохранение информации о состоянии заданий и шагов.

  • Запуск задания и возобновление прерванных заданий.

  • Обработка ошибок.

Фреймворки пакетной обработки предоставляют инфраструктуру, которая отвечает общим требованиям выполнения всех пакетных приложений, позволяя разработчикам сосредоточиться на бизнес-логике приложений. Фреймворки пакетной обработки состоят из формата описания заданий и шагов, API и сервиса, доступного во время выполнения, который управляет выполнением пакетных заданий.


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