Je suis en cours d'exécution d'une tâche planifiée dans une application Web qui parfois (pourrait notreproduce elle) donne lieu à l'exception suivante:Accès illégal (Quartz avec JBoss)
[WebappClassLoader] Illegal access: this web application instance has been stopped already. Could not load org.quartz.StatefulJob. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. java.lang.IllegalStateException at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1244) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:169) at org.quartz.JobDetail.class$(JobDetail.java:279) at org.quartz.JobDetail.isStateful(JobDetail.java:425) at org.quartz.simpl.RAMJobStore.triggerFired(RAMJobStore.java:1313) at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:342) 13:41:00,083 ERROR [STDERR] Exception in thread "DefaultQuartzScheduler_QuartzSchedulerThread" 13:41:00,083 ERROR [STDERR] java.lang.NoClassDefFoundError: org.quartz.StatefulJob 13:41:00,083 ERROR [STDERR] at org.quartz.JobDetail.class$(JobDetail.java:279) 13:41:00,083 ERROR [STDERR] at org.quartz.JobDetail.isStateful(JobDetail.java:425) 13:41:00,083 ERROR [STDERR] at org.quartz.simpl.RAMJobStore.triggerFired(RAMJobStore.java:1313) 13:41:00,083 ERROR [STDERR] at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:342)
Il a également NoClassDefFoundError. Il est dit que org.quartz.StatefulJob est introuvable. Voici comment le travail est prévu:
Scheduler sched = StdSchedulerFactory.getDefaultScheduler();
if (!sched.isStarted()){
sched.start();
}
String konf = MyConfigClass.getRow(25).getKonfiguration();
Calendar cal = Calendar.getInstance();
cal.setTime(MyParser.stf.parse(konf));
String expression = "0 " + cal.get(Calendar.MINUTE) + " " + cal.get(Calendar.HOUR_OF_DAY) + " ? * MON-FRI";
CronTrigger ct = new CronTrigger(triggerName, group, jobName, group, expression);
if (sched.getTrigger(triggerName, Scheduler.DEFAULT_GROUP) != null) {
sched.rescheduleJob(triggerName, group, ct);
} else {
JobDetail jd = new JobDetail(jobName, group, MyJob.class);
sched.scheduleJob(jd, ct);
}
Je ne sais pas ce qui pourrait être le problème. D'abord j'ai pensé que la session meurt avant que le travail s'exécute, mais j'ai essayé et ce n'est pas le cas. La chose intéressante est que, après cette exception, le travail s'exécute à nouveau sans problème.
Avez-vous des idées?
J'ai ajouté quelques détails pour affiner les problèmes possibles. – Atticus