【发布时间】:2014-08-17 21:33:18
【问题描述】:
我的应用程序在 tomee 上运行,并且我有 ejb 计时器每两分钟触发一次超时方法。计时器第一次触发了超时方法,并且当计时器第二次尝试触发相同的方法时仍在运行。它抛出了以下异常..
javax.ejb.ConcurrentAccessTimeoutException: Unable to get write lock on 'timeout' method for: com.abc.xyz
at org.apache.openejb.core.singleton.SingletonContainer.aquireLock(SingletonContainer.java:298)
at org.apache.openejb.core.singleton.SingletonContainer._invoke(SingletonContainer.java:217)
at org.apache.openejb.core.singleton.SingletonContainer.invoke(SingletonContainer.java:197)
at org.apache.openejb.core.timer.EjbTimerServiceImpl.ejbTimeout(EjbTimerServiceImpl.java:769)
at org.apache.openejb.core.timer.EjbTimeoutJob.execute(EjbTimeoutJob.java:39)
at org.quartz.core.JobRunShell.run(JobRunShell.java:207)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:560)
我的所有日志都被相同的堆栈跟踪填满,并且它会继续发生,直到我停止服务器..
如果 timerservice 已经在运行,我们可以让 timerservice 不触发该方法吗? 或者有没有办法在第一次调用被再次触发之前超时..
谢谢,
【问题讨论】:
标签: java jakarta-ee timer ejb ejb-3.1