#java #jboss #wildfly #quartz-scheduler #classcastexception
#java #jboss #wildfly #quartz-планировщик #classcastexception
Вопрос:
Я переношу свое приложение с JBoss 5 на Wildfly 21.0.1.Final. Я развернул файл ear, содержащий war и модуль jar на Wildfly. Во время запуска сервера я вижу следующую ошибку
02:56:03,956 INFO [com.xis.framework.batch.service.scheduler.QuartzScheluder] (ServerService Thread Pool -- 114) START :: com.xis.framework.batch.service.scheduler.QuartzScheluder.getSchduler()
02:56:03,967 ERROR [com.xis.framework.batch.service.scheduler.QuartzScheluder] (ServerService Thread Pool -- 114) **Error occured while getting the schduler object: org.quartz.SchedulerConfigException: Unable to instantiate class load helper class: org.quartz.simpl.CascadingClassLoadHelper cannot be cast to org.quartz.spi.ClassLoadHelper [See nested exception: java.lang.ClassCastException: org.quartz.simpl.CascadingClassLoadHelper cannot be cast to org.quartz.spi.ClassLoadHelper**
at org.quartz.impl.StdSchedulerFactory.instantiate(StdSchedulerFactory.java:538)
at org.quartz.impl.StdSchedulerFactory.getScheduler(StdSchedulerFactory.java:1094)
at com.xiss.framework.batch.service.scheduler.QuartzScheluder.getSchduler(QuartzScheluder.java:68)
at com.xis.framework.batch.service.scheduler.QuartzScheluder.processJobs(QuartzScheluder.java:40)
at com.xis.framework.batch.service.scheduler.QuartzInitializerListener.contextInitialized(QuartzInitializerListener.java:99)
at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:187)
at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:219)
at io.undertow.servlet.core.DeploymentManagerImpl$1.call(DeploymentManagerImpl.java:187)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
QuartzScheluder.java
if (jobDetails != null amp;amp; jobDetails.size() != 0) {
Scheduler scheduler = getSchduler(); --->Error at this line
for (QuartzJobDetail jobDet : jobDetails) {
processSchduler(jobDet, scheduler);
}
private static Scheduler getSchduler() {
if(logger.isInfoEnabled()){
logger.info(" START :: " QuartzScheluder.class.getName() ".getSchduler()");
}
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler = null;
try {
scheduler = sf.getScheduler();
scheduler.start();
} catch (SchedulerException e) {
logger.error("Error occured while getting the schduler object", e);
}
if(logger.isInfoEnabled()){
logger.info(" END :: " QuartzScheluder.class.getName() ".getSchduler()");
}
return scheduler;
}
Использование файла quartz.properties» (в качестве ресурса), расположенного в пакете org / quartz
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.simpl.RAMJobStore
Мое ухо pom.xml имеет следующую зависимость
<dependency>
<groupId>opensymphony</groupId>
<artifactId>quartz</artifactId>
<version>1.6.3</version>
</dependency>
У кого-нибудь еще была эта проблема, и что можно сделать для ее решения?
Комментарии:
1. Вы рассматривали возможность перехода на
ManagedExecutorService
, а не на Quartz?2. Такого рода ошибки обычно вызываются несколькими идентичными или разными версиями JAR зависимостей в пути к классу вашего приложения. Пожалуйста, проверьте и убедитесь, что ваше приложение не содержит нескольких quartz JAR (в WEB-INF / lib или где-либо еще) или не использует общий модуль Quartz WildFly. Кстати: quartz 1.6.3 — очень древняя (2008 год) версия Quartz, пожалуйста, рассмотрите возможность использования новой версии.
3. @JanMoravec Quartz jar присутствует как в ear, так и в war. Я удалил jar из WEB-INF / lib of war, и это сработало. Спасибо
4. Вот как я исключил jar в pom.xml <плагин> <Идентификатор группы>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <версия>2.6</version> <конфигурация> <packagingExcludes>WEB-INF/lib/quartz-1.5.0.jar </packagingExcludes> </конфигурация> </плагин>