2016-12-19 19 views
3

Здесь у меня есть фрагмент кода, который запускается с помощью таймера EJB, работающего внутри EAR, развернутого на JBoss EAP 6.2.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 минут, Transaction Reaper выйдет из строя:

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.

Вот tracelog, где транзакция начинается 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 :: вставка значение тайм-аута.

Теперь вот tracelog одного и того же события, но на EAP 6.4.8 (я проверил, что тайм-аут по умолчанию устанавливается на 300 секунд в 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.

Смежные вопросы