Несанкционированный доступ (Кварц с JBoss)

Я выполняю запланированное задание в веб-приложении, которое иногда (мог notreproduce это) приводит к следующему исключению:

[WebappClassLoader] Несанкционированный доступ: этот экземпляр веб-приложения уже был остановлен. Не мог загрузить org.quartz. StatefulJob. Возможное следующее отслеживание стека вызывается ошибкой, брошенной для отладки целей, а также попытаться завершить поток, который вызвал несанкционированный доступ и не оказывает функционального влияния. java.lang. IllegalStateException в org.apache.catalina.loader. WebappClassLoader.loadClass(WebappClassLoader.java:1244) в org.apache.catalina.loader. WebappClassLoader.loadClass(WebappClassLoader.java:1204) в java.lang. ClassLoader.loadClassInternal(ClassLoader.java:319) в java.lang. Класс forName0 (Собственный метод) в java.lang. Class.forName (Класс java:169) в org.quartz. JobDetail.class$ (JobDetail.java:279) в org.quartz. JobDetail.isStateful(JobDetail.java:425) в org.quartz.simpl. RAMJobStore.triggerFired (RAMJobStore.java:1313) в org.quartz.core. QuartzSchedulerThread.run(QuartzSchedulerThread.java:342) 13:41:00  083 ОШИБКИ [STDERR] Исключение в потоке "DefaultQuartzScheduler_QuartzSchedulerThread" 13:41:00  083 ОШИБКИ [STDERR] java.lang. NoClassDefFoundError: org.quartz. StatefulJob 13:41:00  083 ОШИБКИ [STDERR] в org.quartz. JobDetail.class$ (JobDetail.java:279) 13:41:00  083 ОШИБКИ [STDERR] в org.quartz. JobDetail.isStateful(JobDetail.java:425) 13:41:00  083 ОШИБКИ [STDERR] в org.quartz.simpl. RAMJobStore.triggerFired (RAMJobStore.java:1313) 13:41:00  083 ОШИБКИ [STDERR] в org.quartz.core. QuartzSchedulerThread.run(QuartzSchedulerThread.java:342)

Там также NoClassDefFoundError. Это говорит это org.quartz. StatefulJob не найден. Вот то, как задание планируется:

 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);
 }

Я не знаю то, что могло быть проблемой. Сначала я думал, что сессия умирает, прежде чем задание выполняется, но я попробовал его, и это - не случай. Интересная вещь состоит в том что после этого исключения, прогонов задания снова без проблемы.

У Вас есть какие-либо идеи?

1
задан kiamlaluno 4 August 2010 в 08:22
поделиться

1 ответ

Похоже, ваша кварцевая задача пытается что-то сделать после остановки вашего приложения. Возможно, он пытается получить доступ к некоторым ресурсам, которые были доступны во время работы вашего приложения, но не больше (возможно, что-то вроде getResourceAsStream ).

Может помочь, если вы разместите дополнительную информацию: трассировки стека, код вашей работы и т. Д.

После обновления: Я думаю, что происходит вот что:

  • Вы успешно планируете свою работу
  • По какой-то причине ваше веб-приложение остановлено. Я бы поискал в журналах JBoss по какой-то причине.
  • В этот момент приходит время выполнить ваше задание ( org.quartz.simpl.RAMJobStore.triggerFired (RAMJobStore.java:1313) )
  • Этот вызов переходит к isStateful метод JobDetail класс
  • В методе есть этот код return (StatefulJob.class.isAssignableFrom (jobClass));
  • Класс StatefulJob ранее не загружался. Ваш classLoader пытается загрузить его ( org.apache.catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.java:1204) )
  • Поскольку ваше веб-приложение было остановлено, вы получаете исключение

Способ Я вижу, у вас есть два варианта:

  • Игнорировать эту проблему, поскольку вы ничего не можете сделать, чтобы заставить кварц работать после того, как ваше веб-приложение было остановлено
  • Попытайтесь выяснить, что заставляет ваше веб-приложение останавливаться, и исправить
2
ответ дан 2 September 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: