J'utilise le quartz 1.6.5. Je suis récemment passé de Quartz Job Store de RamJobStore à org.quartz.impl.jdbcjobstore.JobStoreTX. Depuis lors, j'ai commencé à voir ClassCastException dans mon journal chaque fois que quartz essaie d'exécuter un travail. quartz - java.lang.ClassCastException org.quartz.JobDetail ne peut pas être converti en ScheduledJobDetail avec JobStoreTX
Jul 26, 2010 3:10:00 AM org.quartz.core.ErrorLogger schedulerError
SEVERE: Job (group52.52 threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: java.lang.ClassCastException: org.quartz.JobDetail cannot be cast to ScheduledJobDetail]
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
Caused by: java.lang.ClassCastException: org.quartz.JobDetail cannot be cast to ScheduledJobDetail
at ScheduledJob.execute(ScheduledJob.java:150)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
... 1 more
Mon quartz.properties ressemble:
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.dataSource = myDS
org.quartz.dataSource.dsjta.jndiURL=myDs
org.quartz.jobStore.useProperties=true
j'initialiser mon planificateur en utilisant le code suivant:
org.quartz.Scheduler quartzScheduler = new StdSchedulerFactory("quartz.properties").getScheduler();
Le même code fonctionne avec un RAMJobStore mais pas avec un JobStoreTX. Que pourrais-je manquer ici? Je permis l'exploitation forestière et c'est ce que je trouve dans les journaux:
136672 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.impl.jdbcjobstore.SimpleSemaphore - Lock 'TRIGGER_ACCESS' is desired by: DefaultQuartzScheduler_QuartzSchedulerThread
136672 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.impl.jdbcjobstore.SimpleSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: DefaultQuartzScheduler_QuartzSchedulerThread
136672 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.impl.jdbcjobstore.SimpleSemaphore - Lock 'TRIGGER_ACCESS' given to: DefaultQuartzScheduler_QuartzSchedulerThread
136703 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.impl.jdbcjobstore.SimpleSemaphore - Lock 'TRIGGER_ACCESS' retuned by: DefaultQuartzScheduler_QuartzSchedulerThread
136703 [DefaultQuartzScheduler_QuartzSchedulerThread] DEBUG org.quartz.simpl.SimpleJobFactory - Producing instance of Job 'group152.152', class=ScheduledJob
136703 [DefaultQuartzScheduler_Worker-3] DEBUG org.quartz.core.JobRunShell - Calling execute on job group152.152
136703 [DefaultQuartzScheduler_Worker-3] ERROR org.quartz.core.JobRunShell - Job group152.152 threw an unhandled Exception:
java.lang.ClassCastException: org.quartz.JobDetail cannot be cast to ScheduledJobDetail
at ScheduledJob.execute(SchedulerQuartzImpl.java:150)
at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
136703 [DefaultQuartzScheduler_Worker-3] ERROR org.quartz.core.ErrorLogger - Job (group152.152 threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: java.lang.ClassCastException: org.quartz.JobDetail cannot be cast to ScheduledJobDetail]
at org.quartz.core.JobRunShell.run(JobRunShell.java:227)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
Caused by: java.lang.ClassCastException: org.quartz.JobDetail cannot be cast to ScheduledJobDetail
at ScheduledJob.execute(SchedulerQuartzImpl.java:150)
at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
... 1 more
136703 [DefaultQuartzScheduler_Worker-3] DEBUG org.quartz.impl.jdbcjobstore.SimpleSemaphore - Lock 'TRIGGER_ACCESS' is desired by: DefaultQuartzScheduler_Worker-3
136703 [DefaultQuartzScheduler_Worker-3] DEBUG org.quartz.impl.jdbcjobstore.SimpleSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: DefaultQuartzScheduler_Worker-3
Mise à jour: J'ai essayé la même chose avec org.quartz.impl.jdbcjobstore.JobStoreCMT et toujours le même problème persiste.
Qu'est-ce que 'ScheduledJobDetail'? Il n'y a pas de telle classe dans l'API Quartz. – skaffman
ScheduledJobDetail est une classe que nous avons écrite qui prolonge org.quartz.JobDetail et ajoute quelques champs pour notre commodité. – Venkat