@Named("MyItemReaderImpl")
public class MyItemReaderImpl implements ItemReader {
/* ... Переопределить методы интерфейса ItemReader ... */
}
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
После определения задания в терминах его пакетных артефактов с помощью языка спецификации заданий (JSL) эти артефакты создаются как классы Java, реализующие интерфейсы пакета javax.batch.api
и его подпакетов.
В этом разделе перечислены основные интерфейсы артефактов пакета, показано, как получить доступ к объектам контекста из пакетной среды выполнения, и приведены некоторые примеры.
Здесь рассматриваются следующие темы:
В следующих таблицах перечислены интерфейсы, которые реализуются при создании пакетных артефактов. Реализации интерфейса ссылаются на элементы, описанные в Использование языка спецификации задания.
Таблица 58-3 перечисляет интерфейсы для реализации пакетных артефактов для шагов фрагментов, шагов задачи и элементов принятия решения.
Таблица 58-4 перечисляет интерфейсы для реализации пакетных артефактов для разделённых шагов.
Таблица 58-5 перечисляет интерфейсы реализации пакетных артефактов для слушателей задания и шага.
Таблица 58-3 Основные интерфейсы пакетных артефактов
Пакет |
Интерфейс |
Описание |
|
|
Реализует бизнес-логику шага задачи. На него ссылается элемент |
|
|
Принимает решение о следующем шаге, потоке (flow) или разделителе для выполнения на основе информации от предыдущего шага, потока (flow) или разделителя. На него ссылается элемент |
|
|
Реализует настраиваемую политику контрольных точек для шагов фрагментов. На него ссылается элемент |
|
|
Читает элементы из входного источника в шаге фрагмента. На него ссылается элемент |
|
|
Обрабатывает входные элементы для получения выходных элементов в шагах фрагмента. На него ссылается элемент |
|
|
Записывает выходные элементы в шагах фрагментов. На него ссылается элемент |
Таблица 58-4. Интерфейсы пакетных артефактов разделения
Пакет |
Интерфейс |
Описание |
|
|
Сведения о выполнении разделённого шага, такие как количество разделений, количество потоков (flow) и параметры для каждого разделения. На этот артефакт нет прямой ссылки из файла определения задания. |
|
|
Предоставляет объект |
|
|
Получает контроль, когда разделённый шаг начинается, заканчивается или откатывается. На него ссылается элемент |
|
|
Посылает промежуточные результаты из каждого разделения в анализатор разделений. На него ссылается элемент |
|
|
Обрабатывает данные и окончательные результаты из каждого разделения. На него ссылается элемент |
Таблица 58-5. Интерфейсы пакетных артефактов слушателя
Пакет |
Интерфейс |
Описание |
|
|
Перехватывает выполнение задания до и после запуска задания. На него ссылается элемент |
|
|
Перехватывает выполнение шага до и после выполнения шага. На него ссылается элемент |
|
|
Перехватывает обработку фрагмента в шагах фрагмента до и после обработки каждого фрагмента, а также при ошибках. На него ссылается элемент |
|
|
Перехватывает чтение элементов в шагах фрагментов до и после чтения каждого элемента и при ошибках. На него ссылается элемент |
|
|
Перехватывает обработку элементов в шагах фрагментов до и после обработки каждого элемента и при ошибках. На него ссылается элемент |
|
|
Перехватывает запись элементов в шагах фрагментов до и после записи каждого элемента и при ошибках. На него ссылается элемент |
|
|
Перехватывает повторное считывание элемента при возникновении исключения. На него ссылается элемент |
|
|
Перехватывает повторную обработку элементов в шагах фрагментов при возникновении исключений. На него ссылается элемент |
|
|
Перехватывает повторную запись элементов в шагах фрагментов при возникновении исключения. На него ссылается элемент |
|
|
Перехватывает пропущенную обработку исключений при чтении элементов в шагах фрагментов. На него ссылается элемент |
|
|
Перехватывает пропущенную обработку исключений при обработке элементов в шагах фрагментов. На него ссылается элемент |
|
|
Перехватывает пропущенную обработку исключений при записи элементов в шагах фрагментов. На него ссылается элемент |
Чтобы убедиться, что контексты и инъецирование зависимостей (CDI) работает в ваших пакетных артефактах, выполните следующие действия.
Определите свои реализации пакетного артефакта как именованные компоненты CDI, используя аннотацию @Named
.
Например, определите реализацию читателя элементов в шаге фрагмента следующим образом:
@Named("MyItemReaderImpl")
public class MyItemReaderImpl implements ItemReader {
/* ... Переопределить методы интерфейса ItemReader ... */
}
Предоставьте публичный пустой конструктор без аргументов для ваших пакетных артефактов.
Например, предоставьте следующий конструктор для артефакта выше:
public MyItemReaderImpl() {}
Укажите имя CDI для пакетных артефактов в файле определения задания вместо использования полного имени класса.
Например, определите шаг для артефакта выше следующим образом:
<step id="stepA" next="stepB">
<chunk>
<reader ref="MyItemReaderImpl"></reader>
...
</chunk>
</step>
В этом примере используется имя CDI (MyItemReaderImpl
) вместо полностью определённого имени класса (com.example.pkg.MyItemReaderImpl
) для указания пакетного артефакта.
Убедитесь, что модуль является архивом бина CDI, пометив пакетные артефакты аннотацией javax.enterprise.context.Dependent
или включив пустой дескриптор развёртывания beans.xml
в приложение. Например, следующий пакетный артефакт помечен @Dependent
:
@Dependent
@Named("MyItemReaderImpl")
public class MyItemReaderImpl implements ItemReader { ... }
Для получения дополнительной информации об архивах бинов см. Упаковка CDI-приложений в главе 27 «Контексты и инъецирование зависимостей в Java EE: дополнительные темы».
Примечание: Для доступа к объектам контекста из пакетной среды выполнения в пакетных артефактах необходима поддержка контекстов и инъецирования зависимостей (CDI). |
Если не выполнить эту процедуру, можно столкнуться со следующими ошибками.
Пакетная среда выполнения не сможет найти некоторые пакетные артефакты.
Пакетные артефакты сгенерируют исключения NullPointerException при доступе к инъецированным объектам.
Пакетная среда выполнения предоставляет объекты контекста, которые реализуют интерфейсы JobContext
и StepContext
из пакета javax.batch.runtime.context
. Эти объекты связаны с текущим заданием и шагом соответственно, и позволяют выполнять следующие действия:
Получение информации от текущего задания или шага, например его имя, идентификатор объекта, идентификатор выполнения, статус пакета и статус завершения
Установка пользовательского статуса завершения
Сохранение данных пользователя
Получение значений свойств из определения задания или шага
Вы можете инъецировать объекты контекста из пакетной среды выполнения при реализации пакетного артефакта, такие как читатели, обработчики, писатели элементов, слушатели и т. д. В следующем примере показано, как получить доступ к значениям свойств из файла определения задания в реализации читателя элементов:
@Dependent
@Named("MyItemReaderImpl")
public class MyItemReaderImpl implements ItemReader {
@Inject
JobContext jobCtx;
public MyItemReaderImpl() {}
@Override
public void open(Serializable checkpoint) throws Exception {
String fileName = jobCtx.getProperties()
.getProperty("log_file_name");
...
}
...
}
Смотрите Инъецирование зависимостей в пакетных артефактах для получения инструкций о том, как определить пакетные артефакты для использования инъецирования зависимостей.
Замечание: Не обращайтесь к объектам пакетного контекста внутри конструкторов артефактов. Поскольку задание не запускается до тех пор, пока оно не отправлено на выполнение, объекты контекста пакета не будут доступны, когда CDI инстанцирует объекты артефактов при загрузке приложения. Инстанцирование этих бинов завершится неудачно, и пакетная среда выполнения не сможет найти пакетные артефакты, когда приложение отправит задание. |
Назад | Вперёд | Содержание |