Почему предупреждение "TransactionReaper :: check timeout для TX" в JBoss server.log - PullRequest
12 голосов
/ 29 апреля 2011

Я использую Hibernate 3.6.0 с JBoss 6.0-Final и моей базой данных является MS-SQL Server 2008 .Я должен получить данные о сотрудниках с сервера LDAP и вставить их в базу данных - количество записей LDAP составляет 180 000 или более.Я использую управляемую компонентом транзакцию , потому что при использовании CMT моя транзакция никогда не фиксируется (из-за большого объема вставки).

Логика такова: в цикле while я продолжаю извлекать и создавать записи в базе данных, используя JPA (Hibernate).Таким образом, у меня есть длинный ряд действий по созданию извлечения как часть API EJB без состояния.Я вызываю entityManager.flush () / clear () и отправка транзакции после обработки каждые 20 записей.

Я получаю следующее WARN сообщение в JBoss Serevr.log после того, как я вставил 40000 записей.Не уверен, действительно ли это предупреждение или ошибка?Хотя я получаю эту ошибку, сервер все еще работает и продолжает вставлять новые записи в БД.

Кто-нибудь может подсказать, если я что-то делаю не так?Или что вызывает эту ошибку?

Есть ли способ увеличить время ожидания EJB ?

16:52:49,690 WARN  [com.arjuna.ats.arjuna] ARJUNA-12117 TransactionReaper::check timeout for TX 0:ffff105966b8:126a:4db9fc0a:a4 in state  RUN
16:52:49,691 WARN  [com.arjuna.ats.arjuna] ARJUNA-12121 TransactionReaper::doCancellations worker Thread[Transaction Reaper Worker 0,5,jboss] successfully canceled TX 0:ffff105966b8:126a:4db9fc0a:a4

Любая помощь будет высоко ценится.

Ответы [ 2 ]

8 голосов
/ 13 октября 2015

Этот веб-сайт содержит несколько дополнительных способов изменить время ожидания транзакции jboss. Например, вы можете указать его в своем конфигурационном файле standalone.xml как подсистему, подобную этой:

<subsystem xmlns="urn:jboss:domain:transactions:3.0">
    <core-environment>
        <process-id><uuid/></process-id>
    </core-environment>
    <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
    <coordinator-environment default-timeout="<your timeout value here>"/>
</subsystem>

Альтернативно настройте параметр времени ожидания транзакции через платформу администрирования jboss в подсистемах-> транзакция-> Тайм-аут

Может быть, это поможет.

4 голосов
/ 25 июля 2012

Согласно вашему собственному комментарию (но для реального примера), если вам нужно увеличить время ожидания транзакции, вы можете использовать аннотацию для метода любого класса, определяющего вашу границу транзакции (обычно это «фасадная» имплементация).

Например, используя org.springframework.transaction.annotation.Transactional

@Transactional(timeout = 600) // value is in seconds

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

...