У меня проблема с кварцем (плагин: quartz2: 2.1.6.2, но у меня есть тест даже с плагином: кварц: 1.0-RC7, но проблема не меняется) в моем проекте Grails (grails 2.2.1).Кварцевое задание перестает выполняться на исключении StaleObjectStateException
У меня есть работа, как этот
class MyJob {
def concurrent = false
def execute(context){
try {
//....
// works with domains .....
myDomain.save(flush: true)
// works with domains .....
//....
sessionFactory.currentSession.flush()
} catch (org.springframework.dao.OptimisticLockingFailureException olfe) {
println "Job failed by database exception "
} catch (org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException ole){
println "Job failed by database exception "
} catch (org.hibernate.HibernateException hibe){
println "Job failed by database exception "
}
}
}
}
Иногда StaleObjectStateException в происходить подавление метода выполнения. Это нормально для моей логики, я использую оптимистичную блокировку Грайла, и это исключение происходит только раз в неделю.
Проблема заключается в том, что это исключение происходит после того, как Job перестает стрелять снова.
Я попытался co обернуть код метода в попытке уловить и сфотографировать сессию спящего режима внутри, чтобы захватить исключение, но без фортуны. Исключением не является захват ни одним из моих улов.
В поисках онлайн Я нашел это old grails quartz bug, но он исправлен, и в любом случае использование try {} catch должно обойти ошибку.
P.S. Работа запланирована на bootstrab вызовом этого типа
MyJob.schedule(10000L)
Исключение, которое останавливает планирование является
[194949896] core.ErrorLogger Unable to notify JobListener(s) of Job that was executed: (error will be ignored). trigger= DEFAULT.MT_3tbn6lewgiqa3 job= DEFAULT.MyJob
org.quartz.SchedulerException: JobListener 'persistenceContextJobListener' threw exception: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [MyDomain#42] [See nested exception: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [MyDomain#42]]
at org.quartz.core.QuartzScheduler.notifyJobListenersWasExecuted(QuartzScheduler.java:1939)
at org.quartz.core.JobRunShell.notifyJobListenersComplete(JobRunShell.java:361)
at org.quartz.core.JobRunShell.run(JobRunShell.java:235)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [MyDomain#42]
at grails.plugin.quartz2.PersistenceContextJobListener.jobWasExecuted(PersistenceContextJobListener.groovy:46)
at org.quartz.core.QuartzScheduler.notifyJobListenersWasExecuted(QuartzScheduler.java:1937)
... 3 more
.....
events.PatchedDefaultFlushEventListener Could not synchronize database state with session
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [MyJob#42]
at MyJob.execute(MyJob.groovy:354)
at grails.plugin.quartz2.GrailsArtefactJob.execute(GrailsArtefactJob.java:57)
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
в вашем примере кода вы не поймать «org.hibernate.StaleObjectStateException», так что я думаю, что это нормально работа провал ... – moskiteau
@moskiteau org.hibernate.StaleObjectStateException является org.hibernate.HibernateException –