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

jav*_*r71 12 jboss timeout


我正在使用Hibernate 3.6.0JBoss 6.0-Final版本,我的数据库是MS-SQL Server 2008.我必须从LDAP服务器获取员工数据并将其插入数据库 - LDAP条目的数量为180,000或更多.我正在使用bean托管事务,因为使用CMT我的事务永远不会被提交(因为插入的高卷).

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

在插入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
Run Code Online (Sandbox Code Playgroud)

任何帮助都感激不尽.

小智 8

本网站总结了一些更改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>
Run Code Online (Sandbox Code Playgroud)

备选通过子系统 - >事务 - >超时下的jboss管理平台调整事务超时参数

也许这会有所帮助.


Red*_*eti 6

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

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

@Transactional(timeout = 600) // value is in seconds
Run Code Online (Sandbox Code Playgroud)

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