Friday, 7 August 2009

Eclipse, Quartz and Seam, Classloader exception

When changing workspaces in Eclipse, one of the projects started encountering a problem with a ClassLoader problem when running an asynchronous job through Quartz. The error was:

15:43:17,175 ERROR [JobStoreCMT] Error retrieving job, setting trigger state to ERROR.
org.quartz.JobPersistenceException: Couldn't retrieve job because a required class was not found: No ClassLoaders found for: org.jboss.seam.async.AsynchronousInvocation [See nested exception: java.lang.ClassNotFoundException: No ClassLoaders found for: org.jboss.seam.async.AsynchronousInvocation]
at org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveJob(JobStoreSupport.java:1392)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggerFired(JobStoreSupport.java:2879)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$38.execute(JobStoreSupport.java:2847)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3760)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggerFired(JobStoreSupport.java:2841)
at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:342)
Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: org.jboss.seam.async.AsynchronousInvocation


Needless to say this was a bit suprising. The scheduler started ok (setup to start at application startup), and the application could submit a job correctly. It just wouldn't run through the scheduler.

After much hunting through the forums (again), it became clear the problem was that the Quartz library being used was the one included in JBoss (which I had previously upgraded to 1.6.5). The solution turned out to be manually adding a copy of the library (quartz.jar) into the WebContent/WEB-INF/lib directory in the Eclipse project. Then a clean rebuild and restart of the server, and hey presto, it works.

No comments:

Post a Comment