为什么JBoss server.log中的“TransactionReaper :: check for TX”警告

时间:2011-04-29 00:11:19

标签: jboss timeout


我正在使用 Hibernate 3.6.0 JBoss 6.0-Final 版本,我的数据库 MS-SQL Server 2008 。 我必须从LDAP服务器获取员工数据并将其插入数据库 - LDAP条目的数量为180,000或更多。 我正在使用 bean托管交易,因为使用 CMT 我的交易 从不 得到提交(因为插入的数量很大)

逻辑是:在一个while循环中,我一直在抓取&使用JPA(Hibernate)在数据库中创建条目。因此,作为无状态EJB api的一部分,我有一系列的fetch-create活动。 我在处理每20个记录后调用entityManager.flush()/ clear()和提交事务

在插入40,000条记录后,我在JBoss Serevr.log中关注 WARN消息。 不确定它是否真的是警告或错误?
虽然我收到此错误,但服务器仍然运行并继续在DB中插入新记录。

有人可以建议我做错了什么吗?或者是什么导致了这个错误?

有没有办法增加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 个答案:

答案 0 :(得分:8)

This website总结了一些更改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管理平台调整事务超时参数 - &gt;事务 - &gt;超时

也许这会有所帮助。

答案 1 :(得分:4)

根据你自己的评论(但是为了给出一个实际的例子),如果你需要增加一个事务超时,你可以在任何类定义你的事务边界的方法上使用注释(通常是“facade”implmentation)

例如,使用org.springframework.transaction.annotation.Transactional

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

听起来你需要这个用于一次性数据转换任务而不是日常生产代码,因此增加超时可能是合理的。否则,值得考虑将处理批处理为较小的块,并使每个块都成为一个独特的事务,预计将在系统的默认超时时间内完成。