Как настроить время ожидания транзакции в WebSphere Liberty Batch?
- Какова роль javax.transaction.global.timeout?
- Нужно ли реализовывать метод checkpointTimeout() в CheckpointAlgorithm?
- Есть ли что-нибудь на уровне конфигурации сервера? Как это взаимодействует с тем, что установлено на уровне приложения?
1 ответ
(Изменить 2016-12-02: переработано объяснение поведения по умолчанию, когда для транзакции приложения установлено значение тайм-аута "0").
обзор
Позвольте мне описать параметры уровня приложения и то, как они взаимодействуют с таймаутом уровня сервера.
На шаге фрагмента в WebSphere Liberty Java Batch вы можете либо установить тайм-аут на уровне приложения, либо установить для тайм-аута значение "0", по умолчанию равное тайм-ауту на уровне сервера.
Кроме того, вы также можете установить верхнюю границу для любого ненулевого значения тайм-аута на уровне приложения через отдельную настройку на уровне сервера.
Тайм-аут на уровне приложения
Тайм-аут транзакции чанка может быть установлен либо:
В XML (статический)
На уровне шага в JSL со специальным свойством шага: javax.transaction.global.timeout (секунд)
Например
<step id="MyStep">
<properties>
<!-- In seconds -->
<property name="javax.transaction.global.timeout" value="120"/>
Если явно не определено в XML, по умолчанию используется значение 180 (секунд).
В Java (динамический)
Если вам нужно больше динамического / программного управления, вы можете реализовать собственный алгоритм CheckpointAlgorithm и написать его checkpointTimeout(), который будет возвращать все, что вы хотите (другое значение для каждого чанка, даже если вы действительно этого хотите).
Тайм-ауты на уровне сервера (JVM)
Установка верхней границы для значений времени ожидания приложения
Вы можете запретить приложению устанавливать слишком большое значение тайм-аута.
В конфигурации сервера (server.xml) используйте propogatedOrBMTTranLifetimeTimeout:
<transaction propogatedOrBMTTranLifetimeTimeout="90s"/>
Это будет действовать как верхняя граница для любого ненулевого значения тайм-аута приложения, либо через javax.transaction.global.timeout
или ваш метод checkpointTimeout(),
Тайм-аут по умолчанию, когда тайм-аут приложения не установлен
В случае, если javax.transaction.global.timeout
устанавливается в "0" или в случае, если ваш метод checkpointTimeout() возвращает "0", вы получите тайм-аут по умолчанию от сервера.
Это значение тайм-аута по умолчанию составляет 120 секунд.
Чтобы изменить конфигурацию сервера (server.xml), используйте totalTranLifetimeTimeout, например:
<transaction totalTranLifetimeTimeout="60s"/>
Замечания:
Как упоминалось выше, хотя, если javax.transaction.global.timeout
не устанавливается вообще, время ожидания приложения по умолчанию равно 180, и поэтому totalTranLifetimeTimeout НЕ вступает в игру.
Другие заметки / ссылки
Примечание. Представление " Дизайн" инструмента WDT значительно упрощает работу и запоминание этих значений атрибутов конфигурации сервера.
Сопоставление с традиционным конфигом WebSphere Application Server
Атрибут propogatedOrBMTTranLifetimeTimeout здесь в основном соответствует максимальному времени ожидания транзакции в традиционном режиме, в то время как totalTranLifetimeTimeout более явно отображает общее время ожидания транзакции в традиционном режиме.
В этой документации описаны некоторые хорошие примеры, которые по-прежнему в значительной степени актуальны в Liberty.