2010-07-27 30 views
1

我正在使用石英1.6.5。我最近从QuartJ Job Store从RamJobStore转到org.quartz.impl.jdbcjobstore.JobStoreTX。由于这一点,每当quartz尝试运行作业时,我已经开始在我的日志中看到ClassCastException石英 - java.lang.ClassCastException org.quartz.JobDetail无法转换为与JobStoreTX的ScheduledJobDetail

 
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 

我quartz.properties的样子:

 
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 

我初始化使用下面的代码我调度: org.quartz.Scheduler quartzScheduler = new StdSchedulerFactory("quartz.properties").getScheduler(); 相同的代码工作与RAMJobStore,但不与JobStoreTX。我在这里可能会错过什么? 我启用了日志记录,这是我发现的日志:

 
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 

更新:我试过用相同和org.quartz.impl.jdbcjobstore.JobStoreCMT还是一样的问题仍然存在。

+0

什么是'ScheduledJobDetail'? Quartz API中没有这样的类。 – skaffman 2010-07-27 10:06:09

+0

ScheduledJobDetail是我们写的一个类,它扩展了org.quartz.JobDetail并为我们的方便添加了一些字段。 – Venkat 2010-07-27 10:12:50

回答

0

问题可能是你已经子类JobDetail

当您使用RAMJobStore时,您的ScheduledJobDetail对象将被保存在内存中,因此您可以从JobDetail退回而不会出现问题。然而,当使用数据库JobStore时,Quartz将自己重建对象JobDetail,并且无法知道您希望它为此使用自定义类,因此您将得到异常。

即使Quartz知道使用ScheduledJobDetail,它也无法处理您添加的其他字段。

子类JobDetail是不是要走的路。你需要找到一些其他的方式来编码这个信息,而不需要子类化。

相关问题