2011-04-29 416 views
8


我使用Hibernate的3.6.0JBoss的6.0决赛释放和我的数据库是MS-SQL Server 2008的。 我必须从LDAP服务器获取员工数据并将其插入到数据库中 - LDAP条目的数量为180,000或更多。 我使用Bean管理的事务,因为使用CMT我的交易从未被提交(因为插入的高volumn)。为什么在JBoss的 “TransactionReaper ::检查超时TX” 警告的server.log

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

我在JBoss Serevr.log中收到以下WARN消息我插入了40,000条记录。 不确定它是否真的是一个警告或错误?
虽然我得到这个错误,服务器仍然运行,并继续在数据库中插入新记录。

任何人都可以建议如果我做错了什么?或者是什么导致这个错误?

有没有办法让增加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 

任何帮助将不胜感激。

+1

增加一个**更高的** TransactionTimeout值(如3600秒),我没有看到这样的警告了。所以看起来我需要为这种类型的工作流设置“更高的TransactionTimeout”值。 – javauser71 2011-04-29 06:25:49

+0

我找到了原因,可以使用Api级别通过注释来增加超时值。 – javauser71 2011-06-13 18:28:04

回答

4

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

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

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

这听起来像你需要这个一次性的数据转换任务,而不是一天到一天的生产代码,以便增加超时可能是合理的。否则,值得考虑的是将批处理分成更小的块,并使每个块成为唯一的事务,预计在系统的默认超时内完成。

4

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的管理平台调整事务超时prameter subsystems->交易 - >超时

也许这会有所帮助。

+0

感谢您的咨询!现在我改变了我的答案,以便在这里显示一些内容。希望这将是更合适的答案。 – 2015-10-13 15:33:03