java.lang.NoSuchMethodError во время вызова кварцевого задания, объявленного внутри jboss mbean

У меня два уха развернуты на одном экземпляре jboss. Я использую кварц, настроенный внутри 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
  • app.war

Мое второе строение уха:

  • 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, но это не работает. Когда я добавляю этот файл для проецирования, мой вызов кварца с помощью 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, кроме этих двух приложений для ушей, я также развернул другие приложения: war & ear. Итак, это 4 приложения. Более того, я пытался разделить classLoaders конфигурацией xml, но это не сработало. Я публикую свою конфигурацию xml для приложения для ушей. Я не могу установить изолированные уши для всех приложений, потому что они используют кварцевые mbeans, и после этого кварц не сможет видеть классы заданий (я пытался это сделать, и у меня было исключение NoClassLoadersFound). - person Marcin Erbel; 20.04.2015
comment
Я думаю, что Quartz не видит классы на самом деле может быть побочным эффектом работы изоляции. Есть документы и обсуждения по этому поводу (например, goo.gl/zn8v3U), люди предлагают определить свойство конфигурации Quartz org. quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true - person Alex Nevidomsky; 20.04.2015
comment
Я обновил описание проблемы с моей конфигурацией кварца. К сожалению, мне это не помогает. С изолированным загрузчиком классов кварц, управляемый 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 не настолько глубоки, извините. Но я бы все равно сделал ставку на форсирование порядка загрузчиков классов, а не на другие маршруты: две библиотеки должны быть загружены первыми, переопределив загрузчики классов более высокого уровня. Это просто логика ситуации, как я ее вижу. Это может создать большие проблемы с Quartz, но в остальном я просто не понимаю, как это вообще будет работать. - person Alex Nevidomsky; 20.04.2015

Это связано с тем, что последний скомпилированный класс и зависимая банка, доступные в приложении, имеют другую версию. Например: пусть класс A скомпилирован с зависимым jar X на месте, а затем тот же класс A скомпилирован в другой среде с зависимым jar X1, который содержит новый метод с именем Y в нем. теперь класс будет скомпилирован, потому что новый метод Y доступен в jar X1, когда тот же класс A используется в среде с jar X на месте, тогда это приводит к исключению NoSuchMethod при попытке загрузить класс в память класса. Загрузчик классов выполняет проверку зависимых классов перед загрузкой класса в память классов перед вызовом реального исключения.

person Mohan Raj    schedule 24.04.2015
comment
Хорошо, но я понятия не имею, как это исправить и оставить два уха? Я решил изменить проект уха на военный, но в этом случае у меня меньше возможностей использовать конечные точки EJB, и мне пришлось использовать кварц вручную через свое приложение (не через контейнер Jboss). - person Marcin Erbel; 24.04.2015
comment
Два уха говорят выше, это разные версии одного и того же приложения? - person Mohan Raj; 25.04.2015
comment
Нет, это разные приложения, использующие разные версии одной и той же библиотеки, но их задания вызываются кварцем, который управляется одним и тем же контейнером (JBoss), и в этом проблема. - person Marcin Erbel; 26.04.2015