簡體   English   中英

EJB計時器服務:WTRN0006W:事務xxxx在120秒后已超時

[英]EJB Timer service: WTRN0006W: Transaction xxxx has timed out after 120 seconds

我們有4個計時器作業,每天在不同的時間運行。 為此,我們使用具有4個線程的內部默認持久計時器調度程序。 在此批處理作業中,我們將檢索許多DB2表的內容,然后將每個表數據存儲在遠程服務器或IBM Cloud Object Store中的文件中。 我們注意到的是,如果任何外部資源(例如DB2或遠程服務器的SFTP或IBM COS)確實在120秒之前做出響應,我們將得到以下異常:

    WTRN0124I: When the timeout occurred the thread with which the transaction is, or was most recently, associated was 
    Thread[WebSphere_EJB_Timer_Service_WorkManager.Alarm Pool : 0,5,WebSphere_EJB_Timer_Service_WorkManager: WAS Scheduler: 
    WebSphere_EJB_Timer_Service]. The stack trace of this thread when the timeout occurred was: 
    java.net.SocketInputStream.socketRead0(Native Method)
    java.net.SocketInputStream.socketRead(SocketInputStream.java:127)
    java.net.SocketInputStream.read(SocketInputStream.java:182)
    java.net.SocketInputStream.read(SocketInputStream.java:152)

發生這種情況時,批處理作業將繼續到下一個表,但是當所有表完成后,它將再次重新啟動同一作業。 我們想停止重新啟動批處理作業。 您能幫助我們如何做到這一點。

有幾種不同的方法可以實現所需的行為:

1)增加bean的事務超時,以便timer方法成功完成。 這是在ibm-ejb-jar-ext.xml部署描述符文件中完成的,看起來像這樣將事務超時增加到600秒:

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar-ext xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://websphere.ibm.com/xml/ns/javaee"
    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-ext_1_0.xsd" version="1.0">
  <session name="<your timer bean name>">
    <global-transaction transaction-time-out="600"/>
  </session>
</ejb-jar-ext>

注:您還需要增加服務器的最大事務超時: https : //www.ibm.com/support/knowledgecenter/zh-CN/SSNGTE_7.1.0/com.ibm.tspm.doc_7.1/install/任務/ ConfigureTransactionLifetimeTimeout.html

2)將bean超時方法更改為不使用事務:

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)

3)將bean更改為使用bean管理的事務,然后要么不使用事務,要么在UserTransaction上設置事務超時:

@TransactionManagement(TransactionManagementType.BEAN)
userTransaction.setTransactionTimeout(600);
userTransaction.begin();

4)將EJB TimerService配置為不重試。 計時器方法可能仍會超時,因此從技術上講會失敗,但是容器不會重試該方法。 不幸的是,這僅適用於非持久計時器,方法是按照此處記錄的方式設置“ Maximum number of retrieshttps : //www.ibm.com/support/knowledgecenter/zh/SSAW57_8.5.5/com.ibm.websphere.nd .multiplatform.doc / AE / uejb_timerservice.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM