【发布时间】:2016-11-11 02:20:56
【问题描述】:
我有这样的课:
@Singleton
public class RecoveryWorker {
@Schedule(minute = "*/1", hour = "*", persistent = false)
public void run() {
// heavy db queries ~ 2sec
...
}
...
}
有 2 个 wildfly 实例具有此单例并使用相同的 oracle 数据库
有时我有错误:
RROR [org.jboss.as.ejb3](EJB 默认值 - 10)JBAS014120:为计时器调用超时时出错:[id=66ed65c4-3a2d-4343-870d-5f7a46a7742c timedObjectId=com.package.Worker 自动计时器? :true persistent?:false timerService=org.jboss.as.ejb3.timerservice.TimerServiceImpl@222950e6 initialExpiration=null intervalDuration(in milli sec)=0 nextExpiration=Wed Jun 15 00:01:00 CEST 2016 timerState=IN_TIMEOUT info=null : javax.ejb.ConcurrentAccessTimeoutException: JBAS014373: EJB 3.1 PFD2 4.8.5.5.1 org.jboss.invocation.InterceptorContext$Invocation@ead4bd3 上的并发访问超时 - 无法在 5000MILLISECONDS 内获得锁定
我想知道这个阻塞是如何发生的(Oracle 有一种机制来阻塞表或其他东西?)一次在几个实例中运行一个单例的最佳实践是什么?
【问题讨论】:
-
如果您使用的是 Wildfly 10,请查看 stackoverflow.com/questions/27952769/… 和 docs.jboss.org/author/display/WFLY10/HA+Singleton+Features
标签: java oracle jakarta-ee jboss singleton