gpt4 book ai didi

java - JBoss EAP : @TransactionTimeout not affecting @Timeout Method?

转载 作者:行者123 更新时间:2023-12-01 18:22:37 28 4
gpt4 key购买 nike

这里我有一段由 EJB 计时器触发的代码,在 JBoss EAP 6.2 上部署的 EAR 内运行。

由于 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();
}
}
}
//[...]

但显然 @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

我的错误在哪里?

最佳答案

经过更多尝试后,我发现这似乎是 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::insert 记录的第二个参数是超时值。

现在这是同一事件的跟踪日志,但在 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 上,事务以正确的超时值启动。

关于java - JBoss EAP : @TransactionTimeout not affecting @Timeout Method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41226539/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com