java.lang.NoSuchMethodError по време на извикване на кварцова задача, декларирана в jboss mbean

Имам две уши, разположени на един екземпляр на jboss. Използвам quartz, конфигуриран вътре в mbean. И двете уши използват StatefulJobs. За съжаление единият използва библиотека antlr-runtime-3.0, но вторият antlr-runtime-3.2. Когато JBoss извиква заданието, той взема грешната библиотека. Не знам как да го накарам да използва библиотека от ухото. Моята кварцова версия е надстроена до 1.8.6. JBoss е 4.2.2 GA

Първата ми структура на ухото:

  • МЕТА-ИНФ

  • antlr-runtime-3.0.jar

  • ejb.jar
  • ап.война

Структурата на второто ми ухо:

  • META-INF
    • application.xml
    • jboss-app.xml
  • antlr-runtime-3.2.jar
  • ejb2.jar
  • app2.war

Application.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
    "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
    "http://java.sun.com/dtd/application_1_3.dtd">
    <application>
    <display-name>ear</display-name>
    <module>
        <web>
            <web-uri>app.war</web-uri>
            <context-root>/</context-root>
        </web>
    </module>
    <module>
        <ejb>app.jar</ejb>
    </module>
</application>

jboss-app.xml

<?xml version='1.0' encoding='UTF-8' ?>
<jboss-app>
        <loader-repository>
            pck.class:app.war=unique-app.war
            <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
        </loader-repository>
</jboss-app>

Стек:

org.quartz.SchedulerException: Problem instantiating class 'package.quartz.WsclFailureJob' -  [See nested exception: java.lang.NoSuchMethodError: org.antlr.runtime.Lexer.<init>(Lorg/antlr/runtime/CharStream;Lorg/antlr/runtime/RecognizerSha
redState;)V]
        at org.quartz.core.JobRunShell.initialize(JobRunShell.java:147)
        at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:364)
Caused by: java.lang.NoSuchMethodError: org.antlr.runtime.Lexer.<init>(Lorg/antlr/runtime/CharStream;Lorg/antlr/runtime/RecognizerSharedState;)V
        at package.cond.antlr.CondLexer.<init>(CondLexer.java:55)
        at package.cond.antlr.CondLexer.<init>(CondLexer.java:52)
        at package.cond.ExpressionFactory.getValue(ExpressionFactory.java:58)
        at packagee.Configuration$ConfigInternal.loadParsableParams(Configuration.java:204)
        at packagee.Configuration$ConfigInternal.reload(Configuration.java:172)
        at packagee.Configuration$ConfigInternal.<init>(Configuration.java:161)
        at packagee.Configuration.reload(Configuration.java:56)
        at packagee.Configuration.<init>(Configuration.java:47)
        at packagee.Configuration.<clinit>(Configuration.java:38)
        at packagee.ScenarioProcessor.<init>(ScenarioProcessor.java:71)
        at packagee.ScenarioProcessor.<clinit>(ScenarioProcessor.java:58)
        at package.quartz.WsclFailureJob.<init>(WsclFailureJob.java:22)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
        at java.lang.Class.newInstance0(Class.java:350)
        at java.lang.Class.newInstance(Class.java:303)
        at org.quartz.simpl.SimpleJobFactory.newJob(SimpleJobFactory.java:55)
        at org.quartz.core.JobRunShell.initialize(JobRunShell.java:140)
        ... 1 more

Опитвах също с java2ParentDelegation, зададен на true, но не работи. Когато добавям този файл към проекта, моят quartz, извикващ се от jboss, дава mi ClassNotFoundError по време на извличане на задание от quartz_table. Без този файл всичко работи добре, но когато има само едно приложение, разположено на jboss.

Стек с jboss-app.xml:

    15-04-15 17:49:00,010 TRACE [RepositoryClassLoader]  attempt(1) was: true for :org.jboss.mx.loading.UnifiedClassLoader3@13b310f2{ url=null ,addedOrder=25}
    2015-04-15 17:49:00,010 TRACE [LoadMgr3]  registerLoaderThread, ucl=org.jboss.mx.loading.UnifiedClassLoader3@13b310f2{ url=null ,addedOrder=25}, t=Thread[MySystemClusteredScheduler_QuartzSchedulerThread,5,QuartzScheduler:MySystemClusteredScheduler], prevT=null
    2015-04-15 17:49:00,010 TRACE [LoadMgr3]  Begin beginLoadTask, task=org.jboss.mx.loading.ClassLoadingTask@f31cdb{classname: package.quartz.WsclFailureJob, requestingThread: Thread[MySystemClusteredScheduler_QuartzSchedulerThread,5,QuartzScheduler:MySystemClusteredScheduler], requestingClassLoader: org.jboss.mx.loading.UnifiedClassLoader3@13b310f2{ url=null ,addedOrder=25}, loadedClass: nullnull, loadOrder: 2147483647, loadException: null, threadTaskCount: 0, state: 0, #CCE: 0}
    2015-04-15 17:49:00,010 TRACE [RepositoryClassLoader]  loadClassLocally, org.jboss.mx.loading.UnifiedClassLoader3@13b310f2{ url=null ,addedOrder=25} name=package.quartz.WsclFailureJob
    2015-04-15 17:49:00,010 TRACE [RepositoryClassLoader]  Class in blacklist, name=package.quartz.WsclFailureJob
    2015-04-15 17:49:00,010 TRACE [RepositoryClassLoader]  loadClassLocally, org.jboss.mx.loading.UnifiedClassLoader3@13b310f2{ url=null ,addedOrder=25} name=package.quartz.WsclFailureJob not found
    2015-04-15 17:49:00,010 TRACE [LoadMgr3]  End beginLoadTask, ClassNotFoundException
    2015-04-15 17:49:00,010 TRACE [LoadMgr3]  Begin endLoadTask, task=org.jboss.mx.loading.ClassLoadingTask@f31cdb{classname: package.quartz.WsclFailureJob, requestingThread: Thread[MySystemClusteredScheduler_QuartzSchedulerThread,5,QuartzScheduler:MySystemClusteredScheduler], requestingClassLoader: org.jboss.mx.loading.UnifiedClassLoader3@13b310f2{ url=null ,addedOrder=25}, loadedClass: nullnull, loadOrder: 2147483647, loadException: null, threadTaskCount: 0, state: 0, #CCE: 0}
    2015-04-15 17:49:00,010 TRACE [RepositoryClassLoader]  release(1) for :org.jboss.mx.loading.UnifiedClassLoader3@13b310f2{ url=null ,addedOrder=25}
    2015-04-15 17:49:00,010 TRACE [RepositoryClassLoader]  released, holds: 0
    2015-04-15 17:49:00,010 TRACE [RepositoryClassLoader]  loadClass org.jboss.mx.loading.UnifiedClassLoader3@13b310f2{ url=null ,addedOrder=25} name=package.quartz.WsclFailureJob not found
    2015-04-15 17:49:00,011 ERROR [JobStoreTX]  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: package.quartz.WsclFailureJob [See nested exception: java.lang.ClassNotFoundException: No ClassLoaders found for: package.quartz.WsclFailureJob]
            at org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveJob(JobStoreSupport.java:1416)
            at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggerFired(JobStoreSupport.java:2903)
            at org.quartz.impl.jdbcjobstore.JobStoreSupport$38.execute(JobStoreSupport.java:2871)
            at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3788)
            at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggerFired(JobStoreSupport.java:2

865)
        at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:319)
Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: package.quartz.WsclFailureJob
        at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:306)
        at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:521)
        at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:415)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at org.quartz.simpl.InitThreadContextClassLoadHelper.loadClass(InitThreadContextClassLoadHelper.java:72)
        at org.quartz.simpl.CascadingClassLoadHelper.loadClass(CascadingClassLoadHelper.java:116)
    at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.selectJobDetail(StdJDBCDelegate.java:894)
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveJob(JobStoreSupport.java:1404)

Регистрирайте се без jboss-app.xml. Приложението работи добре, когато има само едно разгърнато на jboss:

2015-04-15 17:53:40,370 TRACE [org.jboss.mx.loading.RepositoryClassLoader] loadClassLocally, org.jboss.mx.loading.UnifiedClassLoader3@7c067f03{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44} name=package.quartz.WsclFailureJob class=class package.quartz.WsclFailureJob cl=org.jboss.mx.loading.UnifiedClassLoader3@7c067f03{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44}
2015-04-15 17:53:40,370 TRACE [org.jboss.mx.loading.ClassLoadingTask] setLoadedClass, theClass=class package.quartz.WsclFailureJob, order=44
2015-04-15 17:53:40,370 TRACE [org.jboss.mx.loading.UnifiedLoaderRepository3] cacheLoadedClass, classname: package.quartz.WsclFailureJob, class: class package.quartz.WsclFailureJob, ucl: org.jboss.mx.loading.UnifiedClassLoader3@7c067f03{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44}, prevClass: null
2015-04-15 17:53:40,370 TRACE [org.jboss.mx.loading.LoadMgr3] Notifying task of thread completion, loadTask:org.jboss.mx.loading.ClassLoadingTask@136e2ea3{classname: package.quartz.WsclFailureJob, requestingThread: Thread[main,5,jboss], requestingClassLoader: org.jboss.mx.loading.UnifiedClassLoader3@7c067f03{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44}, loadedClass: class package.quartz.WsclFailureJobpackage.quartz.WsclFailureJob@3eeec5b4<CodeSource: (file:/jboss/server/default/tmp/deploy/tmp34768system.ear-contents/system.jar <no signer certificates>)>, loadOrder: 44, loadException: null, threadTaskCount: 0, state: 1, #CCE: 0}
2015-04-15 17:53:40,370 TRACE [org.jboss.mx.loading.LoadMgr3] End nextTask(0), loadTask=org.jboss.mx.loading.ClassLoadingTask@136e2ea3{classname: package.quartz.WsclFailureJob, requestingThread: Thread[main,5,jboss], requestingClassLoader: org.jboss.mx.loading.UnifiedClassLoader3@7c067f03{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44}, loadedClass: class package.quartz.WsclFailureJobpackage.quartz.WsclFailureJob@3eeec5b4<CodeSource: (file:/jboss/server/default/tmp/deploy/tmp34768system.ear-contents/system.jar <no signer certificates>)>, loadOrder: 44, loadException: null, threadTaskCount: 0, state: 4, #CCE: 0}
2015-04-15 17:53:40,370 TRACE [org.jboss.mx.loading.LoadMgr3] Begin endLoadTask, task=org.jboss.mx.loading.ClassLoadingTask@136e2ea3{classname: package.quartz.WsclFailureJob, requestingThread: Thread[main,5,jboss], requestingClassLoader: org.jboss.mx.loading.UnifiedClassLoader3@7c067f03{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44}, loadedClass: class package.quartz.WsclFailureJobpackage.quartz.WsclFailureJob@3eeec5b4<CodeSource: (file:/jboss/server/default/tmp/deploy/tmp34768system.ear-contents/system.jar <no signer certificates>)>, loadOrder: 44, loadException: null, threadTaskCount: 0, state: 4, #CCE: 0}
2015-04-15 17:53:40,370 TRACE [org.jboss.mx.loading.RepositoryClassLoader] release(1) for :org.jboss.mx.loading.UnifiedClassLoader3@7c067f03{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44}
2015-04-15 17:53:40,370 TRACE [org.jboss.mx.loading.RepositoryClassLoader] released, holds: 0
2015-04-15 17:53:40,371 TRACE [org.jboss.mx.loading.RepositoryClassLoader] loadClass org.jboss.mx.loading.UnifiedClassLoader3@7c067f03{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44} name=package.quartz.WsclFailureJob class=class package.quartz.WsclFailureJob cl=org.jboss.mx.loading.UnifiedClassLoader3@7c067f03{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44}
2015-04-15 17:53:40,371 TRACE [org.jboss.mx.loading.RepositoryClassLoader] loadClass org.jboss.mx.loading.UnifiedClassLoader3@7c067f03{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44} name=package.quartz.VerifyTimeoutJob, loadClassDepth=0

Стек без jboss-app.xml, но в случай на 2 внедрени приложения с различни версии на библиотеката antlr-runtime:

2015-04-15 19:01:11,307 TRACE [RepositoryClassLoader]  loadClassLocally, org.jboss.mx.loading.UnifiedClassLoader3@1ab0a47{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48} name=org.antlr.runtime.Recognize
rSharedState class=class org.antlr.runtime.RecognizerSharedState cl=org.jboss.mx.loading.UnifiedClassLoader3@1ab0a47{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48}
2015-04-15 19:01:11,307 TRACE [ClassLoadingTask]  setLoadedClass, theClass=class org.antlr.runtime.RecognizerSharedState, order=48
2015-04-15 19:01:11,307 TRACE [UnifiedLoaderRepository3]  cacheLoadedClass, classname: org.antlr.runtime.RecognizerSharedState, class: class org.antlr.runtime.RecognizerSharedState, ucl: org.jboss.mx.loading.UnifiedClassLoader3@1ab0a47{ ur
l=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48}, prevClass: null
2015-04-15 19:01:11,307 TRACE [LoadMgr3]  Notifying task of thread completion, loadTask:org.jboss.mx.loading.ClassLoadingTask@61b7dc{classname: org.antlr.runtime.RecognizerSharedState, requestingThread: Thread[MySystemClusteredScheduler_QuartzS
chedulerThread,5,QuartzScheduler:MySystemClusteredScheduler], requestingClassLoader: org.jboss.mx.loading.UnifiedClassLoader3@1ab0a47{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48}, loadedClass: class org.a
ntlr.runtime.RecognizerSharedStateorg.antlr.runtime.RecognizerSharedState@196b1a5<CodeSource: (file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear-contents/antlr-runtime-3.2.jar <no signer certificates>)>, loadOrder: 48, loadEx
ception: null, threadTaskCount: 0, state: 1, #CCE: 0}
2015-04-15 19:01:11,307 TRACE [LoadMgr3]  End nextTask(0), loadTask=org.jboss.mx.loading.ClassLoadingTask@61b7dc{classname: org.antlr.runtime.RecognizerSharedState, requestingThread: Thread[MySystemClusteredScheduler_QuartzSchedulerThread,5,Qua
rtzScheduler:MySystemClusteredScheduler], requestingClassLoader: org.jboss.mx.loading.UnifiedClassLoader3@1ab0a47{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48}, loadedClass: class org.antlr.runtime.Recogni
zerSharedStateorg.antlr.runtime.RecognizerSharedState@196b1a5<CodeSource: (file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear-contents/antlr-runtime-3.2.jar <no signer certificates>)>, loadOrder: 48, loadException: null, threa
dTaskCount: 0, state: 4, #CCE: 0}
2015-04-15 19:01:11,307 TRACE [LoadMgr3]  Begin endLoadTask, task=org.jboss.mx.loading.ClassLoadingTask@61b7dc{classname: org.antlr.runtime.RecognizerSharedState, requestingThread: Thread[MySystemClusteredScheduler_QuartzSchedulerThread,5,Quart
zScheduler:MySystemClusteredScheduler], requestingClassLoader: org.jboss.mx.loading.UnifiedClassLoader3@1ab0a47{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48}, loadedClass: class org.antlr.runtime.Recognize
rSharedStateorg.antlr.runtime.RecognizerSharedState@196b1a5<CodeSource: (file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear-contents/antlr-runtime-3.2.jar <no signer certificates>)>, loadOrder: 48, loadException: null, threadT
askCount: 0, state: 4, #CCE: 0}
2015-04-15 19:01:11,307 TRACE [RepositoryClassLoader]  release(1) for :org.jboss.mx.loading.UnifiedClassLoader3@1ab0a47{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48}
2015-04-15 19:01:11,307 TRACE [RepositoryClassLoader]  released, holds: 0
2015-04-15 19:01:11,307 TRACE [RepositoryClassLoader]  loadClass org.jboss.mx.loading.UnifiedClassLoader3@1ab0a47{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48} name=org.antlr.runtime.RecognizerSharedState class=class org.antlr.runtime.RecognizerSharedState cl=org.jboss.mx.loading.UnifiedClassLoader3@1ab0a47{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48}
2015-04-15 19:01:11,307 TRACE [RepositoryClassLoader]  loadClass org.jboss.mx.loading.UnifiedClassLoader3@1ab0a47{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48} name=org.antlr.runtime.BitSet, loadClassDepth=0
2015-04-15 19:01:11,307 TRACE [RepositoryClassLoader]  Loaded class from cache, org.antlr.runtime.BitSet@15b3baf<CodeSource: (file:/home/name/jboss/server/default/tmp/deploy/tmp34122OTHER_SYSTEM.ear-contents/antlr-runtime-3.0.jar <no signer certificates>)>
2015-04-15 19:01:11,307 TRACE [RepositoryClassLoader]  loadClass org.jboss.mx.loading.UnifiedClassLoader3@1ab0a47{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48} name=org.antlr.runtime.BitSet class=class org.antlr.runtime.BitSet cl=org.jboss.mx.loading.UnifiedClassLoader3@45f0ed{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34122OTHER_SYSTEM.ear ,addedOrder=45}
2015-04-15 19:01:11,309 ERROR [ErrorLogger]  An error occured instantiating job to be executed. job= 'DEFAULT.package.quartz.WsclFailureJob'
org.quartz.SchedulerException: Problem instantiating class 'package.quartz.WsclFailureJob' -  [See nested exception: java.lang.NoSuchMethodError: org.antlr.runtime.Lexer.<init>(Lorg/antlr/runtime/CharStream;Lorg/antlr/runtime/RecognizerSharedState;)V]
        at org.quartz.core.JobRunShell.initialize(JobRunShell.java:147)
        at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:364)
Caused by: java.lang.NoSuchMethodError: org.antlr.runtime.Lexer.<init>(Lorg/antlr/runtime/CharStream;Lorg/antlr/runtime/RecognizerSharedState;)V
        at package.cond.antlr.CondLexer.<init>(CondLexer.java:55)
        at package.cond.antlr.CondLexer.<init>(CondLexer.java:52)
        at package.cond.ExpressionFactory.getValue(ExpressionFactory.java:58)
        at package.core.Configuration$ConfigInternal.loadParsableParams(Configuration.java:204)
        at package.core.Configuration$ConfigInternal.reload(Configuration.java:172)
        at package.core.Configuration$ConfigInternal.<init>(Configuration.java:161)
        at package.core.Configuration.reload(Configuration.java:56)
        at package.core.Configuration.<init>(Configuration.java:47)
        at package.core.Configuration.<clinit>(Configuration.java:38)
        at package.core.ScenarioProcessor.<init>(ScenarioProcessor.java:71)
        at package.core.ScenarioProcessor.<clinit>(ScenarioProcessor.java:58)
        at package.quartz.WsclFailureJob.<init>(WsclFailureJob.java:22)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
        at java.lang.Class.newInstance0(Class.java:350)
        at java.lang.Class.newInstance(Class.java:303)
        at org.quartz.simpl.SimpleJobFactory.newJob(SimpleJobFactory.java:55)
        at org.quartz.core.JobRunShell.initialize(JobRunShell.java:140)

Опитвах също свойства на кварц като:

org.quartz.scheduler.classLoadHelper.class=org.quartz.simpl.CascadingClassLoadHelper
org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializer=true
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

person Marcin Erbel    schedule 15.04.2015    source източник
comment
Можете да намерите начин да въведете своя собствена програма за зареждане на класове в код. В зависимост от контрола, който имате, можете да създадете фабрика, която ръчно зарежда класа от желаната директория   -  person kolossus    schedule 23.04.2015
comment
Мислех за това, но реших, че има по-добра идея... Изглежда като заобиколно решение...   -  person Marcin Erbel    schedule 24.04.2015


Отговори (2)


Когато имате две отделни уши, които имат противоречиви зависимости, може да помогне да ги изолирате по отношение на зареждащите класове. JBoss 4 се смята за доста стар в наши дни, но необходимите функции са налични още от 3.0.2 очевидно:

http://www.mastertheboss.com/jboss-server/jboss-configuration/jboss-classloader-issues

person Alex Nevidomsky    schedule 19.04.2015
comment
На същия JBoss, освен тези две приложения за уши, внедрих и други приложения: война и уши. Така че има 4 приложения. Нещо повече, опитвах се да отделя classLoaders чрез xml конфигурация, но не работи. Публикувам своята xml конфигурация за приложението за ухо. Не мога да задам изолирани уши за всички приложения, защото те използват quartz mbeans и след това quartz няма да може да вижда работни класове (опитвах се да направя това и имах NoClassLoadersFound Exception). - person Marcin Erbel; 20.04.2015
comment
Мисля, че Quartz не вижда класове всъщност може да е страничен ефект от изолираната работа. Има документи и дискусии за това (напр. goo.gl/zn8v3U), хората предлагат дефиниране на Quartz config property org. quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true - person Alex Nevidomsky; 20.04.2015
comment
Актуализирах описанието на проблема относно моята кварцова конфигурация. За съжаление не ми помага. С изолиран зареждащ клас quartz, ръководен от JBoss, не вижда моите класове. Можете да прочетете това от втори стек: 2015-04-15 17:49:00,010 TRACE [RepositoryClassLoader] loadClassLocally, org.jboss.mx.loading.UnifiedClassLoader3@13b310f2{ url=null ,addedOrder=25} name=package.quartz. WsclFailureJob 2015-04-15 17:49:00,010 TRACE [RepositoryClassLoader] Клас в черен списък, име=package.quartz.WsclFailureJob - person Marcin Erbel; 20.04.2015
comment
Страхувам се, че познанията ми за JBoss 4 classloader не са толкова дълбоки, съжалявам. Но моят залог все още ще бъде налагането на реда на зареждащите класове, а не на други маршрути: двете библиотеки трябва да бъдат заредени първи, заменяйки зареждащите класове от по-високо ниво. Това е логика на ситуацията, както аз я виждам. Може да създаде големи проблеми с Quartz, но иначе просто не виждам как изобщо ще работи. - person Alex Nevidomsky; 20.04.2015

Това е така, защото най-новият компилиран клас и зависимият буркан, налични в приложението, са с различна версия. Например: Нека клас A се компилира със зависим jar X на място, след което по-късно същият клас A се компилира в различна среда със зависим jar X1, който се състои от нов метод, наречен Y в това. сега класът ще бъде компилиран, тъй като новият метод Y е наличен в jar X1, когато същият клас A се използва в средата с jar X на място, тогава това води до изключение NoSuchMethod при опит за зареждане на класа в паметта на класа. Classloader извършва проверката на зависимите класове, преди да зареди класа в паметта на класа, преди да извика истинско изпълнение.

person Mohan Raj    schedule 24.04.2015
comment
Добре, но нямам идея как да го оправя и да има две уши? Реших да променя ear project във war one, но по този начин имам по-малко възможности да използвам EJB крайни точки и трябваше да използвам quartz ръчно чрез моето приложение (не чрез Jboss Container) - person Marcin Erbel; 24.04.2015
comment
Две уши, които говорят по-горе тук, са различни версии на едно и също приложение? - person Mohan Raj; 25.04.2015
comment
Не, това са различни приложения, използващи различни версии на една и съща библиотека, но техните задачи се извикват от кварц, който се контролира от един и същ контейнер (JBoss) и това е проблемът. - person Marcin Erbel; 26.04.2015