Есть вот такая штука:
@Singleton
public class RecoveryWorker {
@Schedule(minute = "*/1", hour = "*", persistent = false)
public void run() {
// тут происходят тяжелые запросы к базе ~ 2c
...
}
...
}
Запущено несолько инстансов wildfly, настроенных на одну базу oracle, стал ловить такую ошибку:
ERROR [org.jboss.as.ejb3] (EJB default - 10) JBAS014120: Error invoking timeout for timer: [id=66ed65c4-3a2d-4343-870d-5f7a46a7742c timedObjectId=com.package.Worker auto-timer?: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 concurrent access timeout on org.jboss.invocation.InterceptorContext$Invocation@ead4bd3 - could not obtain lock within 5000MILLISECONDS
Есть какой-то встроенный механизм на уровне базы, что второй инстанс не может зайти в критическую секцию? Как решается проблема, когда нужно иметь Singleton на нескольких серверах?