2016-12-19 11 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

public 메소드로 변경해보십시오. https://issues.jboss.org/browse/WFLY-850을 참조하십시오. –

답변

0

좀 더 시험해 본 결과 RedHat JBoss EAP 6.2의 버그 인 것으로 나타났습니다.

다음은 트랜잭션이 EAP 6.2.0에서 시작하는 위치의 tracelog입니다 :

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에 대해 기록 :: 삽입 시간 제한 값입니다.

지금 여기에 같은 이벤트의 tracelog하지만 EAP 6.4.8에 (I은 기본 시간 제한은 6.2.0에 삼백초와 6.4.8 인스턴스로 설정되어 있는지 확인) :

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에서 올바른 시간 초과 값으로 시작됩니다.