Как я могу определить шаг блока JSR 352 для контрольной точки каждые 10 секунд (и вообще использовать встроенную контрольную точку)?
Есть ли простой способ использования <chunk time-limit="10"...>
?
Могу ли я объединить ограничение по времени с моим пользовательским алгоритмом CheckpointAlgorithm?
1 ответ
Короткий ответ:
Наверное, самый простой способ это что-то вроде
<chunk time-limit="10" item-count="999999">
где 999,999 - это просто какое-то большое число, которое никогда не ударит.
Фон
Чтобы объяснить почему, вот более общий ответ на вопрос "как я могу использовать встроенные контрольные точки JSR 325?"
Существует два способа настройки контрольных точек в JSR 352, две политики контрольных точек.
В JSL (XML)
Это встроенное поведение по умолчанию.
На яве
Управляется приложением CheckpointAlgorithm impl и включается через checkpoint-policy="custom" в JSL.
Встроенная политика основывается на времени ИЛИ предмета, в зависимости от того, что будет "первым"
Фундаментальный смысл понимания встроенной политики контрольных точек заключается в том, что она основана на количестве элементов ИЛИ ограничении по времени, в зависимости от того, что наступит раньше.
Примеры
<chunk>
После 10 пунктов (по умолчанию)
<chunk item-count="25">
После 25 пунктов
<chunk time-limit="10">
Через 10 секунд или 10 элементов (опять же, количество элементов по умолчанию), в зависимости от того, что наступит раньше.
<chunk time-limit="10" item-count="25">
После 25 пунктов или 10 секунд, в зависимости от того, что наступит раньше.
<chunk time-limit="10" item-count="999999">
После 999 999 предметов, или 10 секунд, в зависимости от того, что наступит раньше (так что во всех случаях, кроме самой простой обработки, это эффективно означает, что через 10 секунд вы можете увеличить это число при необходимости).
<chunk checkpoint-policy="custom">
Реализовано в вашем собственном коде приложения через CheckpointAlgorithm, с использованием метода isReadyToCheckpoint (), а также, по желанию, также таймаутов), и на него ссылаются как:
<chunk checkpoint-policy="custom"> <checkpoint-algorithm ref="myCustomCheckpointAlgorithm">
обсуждение
Таким образом, предел по умолчанию равен "0", что определяется как "неограниченное время" или "не проверять время". С другой стороны, количество элементов по умолчанию равно 10, и аналогичное поведение для количества элементов 0 не определено.
Таким образом, лучший способ создания контрольной точки, основанной на нескольких секундах, - просто установить достаточно большое количество элементов, чтобы это не имело значения, что обычно не составляет труда в реальных приложениях.
Это пример № 5 выше.
Вы не можете комбинировать встроенные элементы управления с вашим "пользовательским" алгоритмом!
<chunk checkpoint-policy="custom" time-limit="5">
Срок игнорируется!
Вы не можете объединить пользовательский алгоритм ни с одним из атрибутов политики контрольных точек "item" (эти атрибуты просто игнорируются). Вы не можете сказать контрольную точку на основе моего собственного алгоритма ИЛИ в течение 5 секунд, в зависимости от того, что произойдет раньше.
<chunk checkpoint-policy="custom" item-count="500">
Количество предметов игнорируется!
То же, что и в предыдущем примере.
Предостережение
Есть несколько старых, устаревших примеров, например, эта статья, которая также включает в себя политику "коммит-интервал" и "контрольную точку времени", которые НЕ были включены в окончательную спецификацию 1.0.
Заключительные мысли
Вышеупомянутое решение имеет менее элегантное "хакерское" качество.
Возможно, спецификация должна определять поведение где item-count="0"
означает "никогда не проверять контрольную точку на основе количества элементов", что позволило бы получить более простое решение. Возможно, это следует учитывать для возможного обновления 1.1.