Как я могу определить шаг блока 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.

Встроенная политика основывается на времени ИЛИ предмета, в зависимости от того, что будет "первым"

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

Примеры

  1. <chunk>

    После 10 пунктов (по умолчанию)

  2. <chunk item-count="25">

    После 25 пунктов

  3. <chunk time-limit="10">

    Через 10 секунд или 10 элементов (опять же, количество элементов по умолчанию), в зависимости от того, что наступит раньше.

  4. <chunk time-limit="10" item-count="25">

    После 25 пунктов или 10 секунд, в зависимости от того, что наступит раньше.

  5. <chunk time-limit="10" item-count="999999">

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

  6. <chunk checkpoint-policy="custom">

    Реализовано в вашем собственном коде приложения через CheckpointAlgorithm, с использованием метода isReadyToCheckpoint (), а также, по желанию, также таймаутов), и на него ссылаются как:

    <chunk checkpoint-policy="custom">
        <checkpoint-algorithm ref="myCustomCheckpointAlgorithm">
    

обсуждение

Таким образом, предел по умолчанию равен "0", что определяется как "неограниченное время" или "не проверять время". С другой стороны, количество элементов по умолчанию равно 10, и аналогичное поведение для количества элементов 0 не определено.

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

Это пример № 5 выше.


Вы не можете комбинировать встроенные элементы управления с вашим "пользовательским" алгоритмом!

  1. <chunk checkpoint-policy="custom" time-limit="5"> Срок игнорируется!

Вы не можете объединить пользовательский алгоритм ни с одним из атрибутов политики контрольных точек "item" (эти атрибуты просто игнорируются). Вы не можете сказать контрольную точку на основе моего собственного алгоритма ИЛИ в течение 5 секунд, в зависимости от того, что произойдет раньше.

  1. <chunk checkpoint-policy="custom" item-count="500"> Количество предметов игнорируется!

То же, что и в предыдущем примере.

Предостережение

Есть несколько старых, устаревших примеров, например, эта статья, которая также включает в себя политику "коммит-интервал" и "контрольную точку времени", которые НЕ были включены в окончательную спецификацию 1.0.

Заключительные мысли

Вышеупомянутое решение имеет менее элегантное "хакерское" качество.

Возможно, спецификация должна определять поведение где item-count="0" означает "никогда не проверять контрольную точку на основе количества элементов", что позволило бы получить более простое решение. Возможно, это следует учитывать для возможного обновления 1.1.

Другие вопросы по тегам