Тайм-аут транзакции на уровне шага по сравнению с server.xml - PullRequest
0 голосов
/ 22 января 2019

В пакете JSR-352 я определяю время ожидания транзакции на уровне шага для обработки чанка как 900 с. В то же время у меня есть время ожидания транзакции, упомянутое в server.xml как 1800s. этот этап обработки чанка разделен с использованием шага PartitionMapper. Мой вопрос заключается в том, что когда шаг выполняется, несколько потоков теряют время ожидания, используя время ожидания транзакции на уровне шага, равное 900 с. Но несколько потоков зависают на время и получают тайм-аут из-за тайм-аута транзакции server.xml, который составляет 1800 с.

<step id="ReportBatch" >
    <properties >
        <property name="javax.transaction.global.timeout" value="900"/>
    </properties></step>

server.xml
<transaction clientInactivityTimeout="1800" propogatedOrBMTTranLifetimeTimeout="1800" totalTranLifetimeTimeout="1800" transactionLogDirectory="${server.config.dir}/tranlog/"/>

Я ожидаю, что поток должен потерпеть неудачу с тайм-аутом 900 с, указанным на уровне шага. Какой таймаут транзакции имеет преимущество? Это нормально, чтобы удалить время транзакции из server.xml или уменьшить ограничение времени ожидания для server.xml

1 Ответ

0 голосов
/ 23 января 2019

Конфигурирование тайм-аута транзакции

Да, свойство шага javax.transaction.global.timeout " устанавливает тайм-аут транзакции для потоков уровня раздела, выполняющих" чанки "на шаге секционированного чанкатак же, как у вас во фрагменте XML задания (JSL):

<step id="ReportBatch" >
    <properties >
        <property name="javax.transaction.global.timeout" value="900"/>
    </properties>
    <chunk>...</chunk>
    <partition>...</partition>
</step>

Конфигурация сервера может установить верхнюю границу для этих тайм-аутов транзакций "приложения" с помощью:

<transaction propogatedOrBMTTranLifetimeTimeout="1800s"/>

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

Это подробно, наряду с некоторыми другими опциями в этом вопросе и ответе.

Что происходит при тайм-ауте транзакции

Когда тайм-аут транзакции истекает, транзакция немедленно помечается для отката, и в messages.log появляется сообщение вместе с подробной информацией о соответствующем потоке, включаятрассировка стека.

Однако ваше приложение может не заметить сразу. Если оно «зависло», совершая вызов по сети или делаетПри вычислении, интенсивно загружающем ЦП, он будет продолжаться и может видеть только исключение, возникающее, когда он касается транзакционного ресурса или проверяет состояние транзакции и т. д.

...