- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我耳边有一个 EJB 计时器,部署在 JBoss 6.4 上。在 99% 的情况下,计时器工作正常,但有时需要太长时间才能完成并抛出 PersistenceException:事务已在不同线程中回滚!
。
我发现这是由于事务超时值太低造成的。我不想编辑默认值,而是覆盖特定于方法的超时。为了解决这个问题,我将功能分为两种方法:一种是用 @Timeout
注释的方法,另一种是实际完成工作的方法。
这是我的计时器实现:
@Singleton
public class MyTimer implements SomeTimerInterface {
@EJB
private SomeManager myManager;
@Resource
private TimerService timerService;
private Timer timer;
@Override
public void startTimer() {
// Timer scheduled to fire every 7th minute
ScheduleExpression schedule = new ScheduleExpression();
schedule = schedule.hour("*").minute("*/7").second("00");
TimerConfig config = new TimerConfig();
config.setPersistent(false);
timer = timerService.createCalendarTimer(schedule, config);
}
@Timeout
@AccessTimeout(value = 20, unit = TimeUnit.MINUTES)
public void handleTimeout() {
workInNewThread();
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
@TransactionTimeout(unit = TimeUnit.SECONDS, value = 900)
public void workInNewThread() {
// This can take anything from 1 sec to 15 min.
List<Object> objects = myManager.getAllTheDatabaseObjects();
}
}
但是,计时器似乎忽略了 TransactionTimeout,因为它在 5 分钟(默认值)后仍然超时。如何覆盖默认超时以确保计时器完成作业?
最佳答案
不确定我是否理解正确。从您的代码来看,您似乎是从 @Timeout 方法调用 workInNewThread() ,但有一个带有 Tx 属性的方法 cleanup() 。
我猜您是从 @Timeout 调用同一个 bean 中的方法。但在这种情况下,注释(@TxAttribute 和 TxTimeout)都不会生效,因为容器不控制内部方法调用。您需要使用不同的 EJB 或自引用来让 Controller 完成这项工作。另一种选择是直接注释超时方法。
关于java - EJB 计时器忽略 TransactionTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38460517/
using (TransactionScope transaction = TransactionScopeManager.GetTransactionScope(Settings.Import.Ti
我耳边有一个 EJB 计时器,部署在 JBoss 6.4 上。在 99% 的情况下,计时器工作正常,但有时需要太长时间才能完成并抛出 PersistenceException:事务已在不同线程中回滚!
我有一个名为 methodA() 的 EJB 方法调用另一个名为 methodB() 的 EJB 方法,该方法启动一个新的容器管理的事务。在 methodB 中,我强制执行事务超时,该事务超时被 ca
我正在使用 JBoss AS 7.1.1.Final "Brontes" 并在 @Stateless-Bean 中遇到长时间运行的方法调用5 分钟后取消: [com.arjuna.ats.arjuna
这里我有一段由 EJB 计时器触发的代码,在 JBoss EAP 6.2 上部署的 EAR 内运行。 由于 onTimeout(Timer timer) 方法中的处理时间可能比standalone.x
我是一名优秀的程序员,十分优秀!