2011-04-29 431 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