Как настроить время ожидания транзакции в 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.

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