2016-12-19 66 views
3

ここには、JBoss EAP 6.2にデプロイされたEAR内部で実行されるEJBタイマーによってトリガされるコードがあります。JBoss EAP:@TransactionTimeoutは@Timeoutメソッドに影響しませんか?

onTimeout(Timer timer)メソッド内の処理がstandalone.xmlで指定されたデフォルトのトランザクションタイムアウトよりもはるかに長い時間がかかることができますので、私はこの解決策を考え出した:

//[...] 
import javax.ejb.Singleton; 
import javax.ejb.Startup; 
import javax.ejb.Timeout; 
import javax.ejb.Timer; 
import javax.ejb.TimerService; 
import javax.ejb.TransactionAttribute; 
import javax.ejb.TransactionAttributeType; 
import org.jboss.ejb3.annotation.TransactionTimeout; 
//[...] 

@Startup 
@Singleton 
public class DataqReaderServiceImpl extends AbstractDataqReaderService { 

    @Resource 
    private TimerService timerService; 

    @Override 
    @Timeout 
    @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 
    @TransactionTimeout(unit = TimeUnit.MINUTES, value = 60) 
    protected void onTimeout(Timer timer) { 
    try { 
      super.readDataq(timer); 
     } catch (Exception e) { 
      timer.cancel(); 
     } 
    } 
} 
//[...] 

しかしappearantly @TransactionTimeout注釈は無視されます。コードが5分間実行された後、取引リーパーは生きるようになります:

2016-12-19 15:12:21,878 WARN [com.arjuna.ats.arjuna] (Transaction Reaper) ARJUNA012117: TransactionReaper::check timeout for TX 0:ffff0a07065b:296fc7c:5857e084:67ef in state RUN 
2016-12-19 15:12:21,881 WARN [com.arjuna.ats.arjuna] (Transaction Reaper Worker 0) ARJUNA012095: Abort of action id 0:ffff0a07065b:296fc7c:5857e084:67ef invoked while multiple threads active within it. 
2016-12-19 15:12:21,881 WARN [com.arjuna.ats.arjuna] (Transaction Reaper Worker 0) ARJUNA012108: CheckedAction::check - atomic action  0:ffff0a07065b:296fc7c:5857e084:67ef aborting with 1 threads active! 
2016-12-19 15:12:21,882 WARN [com.arjuna.ats.arjuna] (Transaction Reaper Worker 0) ARJUNA012121: TransactionReaper::doCancellations worker Thread[Transaction Reaper Worker 0,5,main] successfully canceled TX 0:ffff0a07065b:296fc7c:5857e084:67ef 

私のミスはどこですか?

+0

パブリックメソッドに変更してみてください。 https://issues.jboss.org/browse/WFLY-850を参照してください。 –

答えて

0

もう少し試してみると、これはRedHat JBoss EAP 6.2のバグだとわかりました。

はここで取引がEAP 6.2.0で始まるのトレースログです:

2016-12-20 07:21:29,754 TRACE [com.arjuna.ats.arjuna] (EJB default - 10) TransactionReaper::insert (BasicAction: 0:ffff0a07065b:-60e989f1:5858dbac:45 status: ActionStatus.RUNNING, 300) 
2016-12-20 07:21:29,754 TRACE [com.arjuna.ats.arjuna] (EJB default - 10) ReaperElement::ReaperElement (BasicAction: 0:ffff0a07065b:-60e989f1:5858dbac:45 status: ActionStatus.RUNNING, 300) 

第二引数はTransactionReaperのためにログに記録さ::インサートは、タイムアウト値です。

は今ここに同じイベントのトレースログですが、EAP 6.4.8に(私は、デフォルトのタイムアウトは、6.2.0と6.4.8のインスタンスで300秒に設定されていることが確認さ):

09:12:52,913 TRACE [com.arjuna.ats.arjuna] (EJB default - 8) TransactionReaper::insert (BasicAction: 0:ffff0a076537:-1ab57a18:5858f5d6:31 status: ActionStatus.RUNNING, 3600) 
09:12:52,913 TRACE [com.arjuna.ats.arjuna] (EJB default - 8) ReaperElement::ReaperElement (BasicAction: 0:ffff0a076537:-1ab57a18:5858f5d6:31 status: ActionStatus.RUNNING, 3600) 

したがって、トランザクションはEAP 6.4.8で正しいタイムアウト値で開始されます。

関連する問題