2015-04-15 46 views
9

Mam dwa uszy wdrożone w jednej instancji jboss. Używam kwarcu skonfigurowanego wewnątrz mbean. Oba uszy używają funkcji StatefulJobs. Niestety używa się biblioteki antlr-runtime-3.0, ale drugiej antlr-runtime-3.2. Kiedy JBoss wywołuje zadanie, pobiera niewłaściwą bibliotekę. Nie wiem jak zmusić go do korzystania z biblioteki z ucha. Moja wersja kwarcowa została uaktualniona do wersji 1.8.6. JBoss jest 4.2.2 GAjava.lang.NoSuchMethodError podczas wywoływania zadania kwarcowego zadeklarowanego wewnątrz jboss mbean

Moja pierwsza konstrukcja ucho:

  • META-INF

  • antlr-runtime-3.0.jar

  • ejb.jar
  • app .war

Moja druga struktura ucho:

  • 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> 

Stos:

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 

Próbowałem również z java2ParentDelegation wartość true, ale to nie działa . Kiedy dodaję ten plik do projektu, mój kwarc wywołujący jboss podaje mi ClassNotFoundError podczas pobierania zadania z quartz_table. Bez tego pliku wszystko działa dobrze, ale gdy jest tylko jedna aplikacja wdrożona na jboss.

Stos z jboss-app.xml:

15-04-15 17:49:00,010 TRACE [RepositoryClassLoader] attempt(1) was: true for :[email protected]{ url=null ,addedOrder=25} 
    2015-04-15 17:49:00,010 TRACE [LoadMgr3] registerLoaderThread, [email protected]{ url=null ,addedOrder=25}, t=Thread[MySystemClusteredScheduler_QuartzSchedulerThread,5,QuartzScheduler:MySystemClusteredScheduler], prevT=null 
    2015-04-15 17:49:00,010 TRACE [LoadMgr3] Begin beginLoadTask, [email protected]{classname: package.quartz.WsclFailureJob, requestingThread: Thread[MySystemClusteredScheduler_QuartzSchedulerThread,5,QuartzScheduler:MySystemClusteredScheduler], requestingClassLoader: [email protected]{ 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, [email protected]{ 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, [email protected]{ 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, [email protected]{classname: package.quartz.WsclFailureJob, requestingThread: Thread[MySystemClusteredScheduler_QuartzSchedulerThread,5,QuartzScheduler:MySystemClusteredScheduler], requestingClassLoader: [email protected]{ 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 :[email protected]{ 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 [email protected]{ 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) 

Log bez jboss-app.xml. Aplikacja działa dobrze, gdy jest tylko jeden rozmieszczony na JBoss:

2015-04-15 17:53:40,370 TRACE [org.jboss.mx.loading.RepositoryClassLoader] loadClassLocally, [email protected]{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44} name=package.quartz.WsclFailureJob class=class package.quartz.WsclFailureJob [email protected]{ 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: [email protected]{ 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:[email protected]{classname: package.quartz.WsclFailureJob, requestingThread: Thread[main,5,jboss], requestingClassLoader: [email protected]{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44}, loadedClass: class [email protected]5b4<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), [email protected]{classname: package.quartz.WsclFailureJob, requestingThread: Thread[main,5,jboss], requestingClassLoader: [email protected]{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44}, loadedClass: class [email protected]5b4<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, [email protected]{classname: package.quartz.WsclFailureJob, requestingThread: Thread[main,5,jboss], requestingClassLoader: [email protected]{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44}, loadedClass: class [email protected]5b4<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 :[email protected]{ 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 [email protected]{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44} name=package.quartz.WsclFailureJob class=class package.quartz.WsclFailureJob [email protected]{ 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 [email protected]{ url=file:/jboss/server/default/tmp/deploy/tmp34768system.ear ,addedOrder=44} name=package.quartz.VerifyTimeoutJob, loadClassDepth=0 

Stos bez jboss-app.xml, ale w przypadku 2 wdrożonych aplikacji z różnymi wersjami biblioteki antlr-runtime:

2015-04-15 19:01:11,307 TRACE [RepositoryClassLoader] loadClassLocally, [email protected]{ 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 [email protected]{ 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: [email protected]{ 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:[email protected]{classname: org.antlr.runtime.RecognizerSharedState, requestingThread: Thread[MySystemClusteredScheduler_QuartzS 
chedulerThread,5,QuartzScheduler:MySystemClusteredScheduler], requestingClassLoader: [email protected]{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48}, loadedClass: class org.a 
ntlr.runti[email protected]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), [email protected]{classname: org.antlr.runtime.RecognizerSharedState, requestingThread: Thread[MySystemClusteredScheduler_QuartzSchedulerThread,5,Qua 
rtzScheduler:MySystemClusteredScheduler], requestingClassLoader: [email protected]{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48}, loadedClass: class org.antlr.runtime.Recogni 
[email protected]<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, [email protected]{classname: org.antlr.runtime.RecognizerSharedState, requestingThread: Thread[MySystemClusteredScheduler_QuartzSchedulerThread,5,Quart 
zScheduler:MySystemClusteredScheduler], requestingClassLoader: [email protected]{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48}, loadedClass: class org.antlr.runtime.Recognize 
[email protected]<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 :[email protected]{ 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 [email protected]{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48} name=org.antlr.runtime.RecognizerSharedState class=class org.antlr.runtime.RecognizerSharedState [email protected]{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48} 
2015-04-15 19:01:11,307 TRACE [RepositoryClassLoader] loadClass [email protected]{ 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, [email protected]<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 [email protected]{ url=file:/home/name/jboss/server/default/tmp/deploy/tmp34140system.ear ,addedOrder=48} name=org.antlr.runtime.BitSet class=class org.antlr.runtime.BitSet [email protected]{ 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) 

ja też próbuje właściwości kwarcu jak:

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

Możesz znaleźć sposób na wprowadzenie własnego programu ładującego klasy w kodzie. W zależności od tego, ile masz kontroli, możesz utworzyć fabrykę, która ręcznie ładuje klasę z żądanego katalogu. – kolossus

+0

Myślałem o tym, ale myślałem, że istnieje jakikolwiek lepszy pomysł ... Wygląda jak obejście ... –

Odpowiedz

3

Gdy masz dwa oddzielne uszy, które mają sprzeczne zależności, może się to przyczynić do izolowania ich w kategoriach classloaders.JBoss 4 jest uważany za dość stary w tych dniach, ale wymagane funkcje były dostępne odkąd 3.0.2 widocznie:

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

+0

ten sam JBoss, oprócz tych dwóch aplikacji do uszu, wdrożyłem także inne aplikacje: war & ear. Więc to 4 aplikacje. Co więcej próbowałem separete classLoaders przez konfigurację xml, ale to nie działa. Publikuję moją konfigurację xml dla aplikacji dou. Nie mogę ustawić izolowanych uszu dla wszystkich aplikacji, ponieważ używają kwarcowych mbeanów, a potem kwarc nie będzie w stanie zobaczyć klas zadań (próbowałem to zrobić i miałem wyjątek NoClassLoadersFound). –

+0

Myślę, że lekcje Quartz nie widzące mogą w rzeczywistości być skutkiem ubocznym działania izolacji. Istnieją dokumenty i dyskusje na ten temat (np. Http://goo.gl/zn8v3U), ludzie sugerują zdefiniowanie właściwości konfiguracji kwarcu org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true –

+0

Zaktualizowałem opis problemu dotyczącego mojej konfiguracji kwarcu. Niestety to mi nie pomaga. Z izolowanym kwarcem ładowacza klasy prowadzonym przez JBossa nie widzę moich zajęć. Możesz go przeczytać z drugiego stosu: "2015-04-15 17: 49: 00,010 TRACE [RepositoryClassLoader] loadClassLocally, [email protected] {url = null, addedOrder = 25} name = package. quartz.WsclFailureJob 2015-04-15 17: 49: 00,010 TRACE [RepositoryClassLoader] Klasa na czarnej liście, name = pakiet.quartz.WsclFailureJob " –

2

Wynika to najnowszy skompilowane klasy i słoik zależny dostępny we wniosku są z innej wersji. Na przykład: pozwól klasie A skompilowanej z zależnym słojem X na miejscu, a następnie tej samej klasy A, skompilowanej w innym środowisku z zależnym słojem X1, który składa się z nowej metody o nazwie Y w tym. teraz klasa zostanie skompilowana, ponieważ nowa metoda Y jest dostępna w słoju X1, gdy ta sama klasa A jest używana w środowisku z słojem X w miejscu, a następnie prowadzi do wyjątku NoSuchMethod podczas próby załadowania klasy do pamięci klasy. Classloader dokonuje weryfikacji klas zależnych przed załadowaniem klasy do pamięci klasy przed wywołaniem prawdziwego egzekucji.

+0

Ok, ale nie mam pojęcia, jak to naprawić i zachować dwa uszy? Postanowiłem zmienić projekt ucha na pierwszy, ale w ten sposób mam mniejsze możliwości używania punktów końcowych EJB i musiałem ręcznie używać kwarcu przez moją aplikację (nie przez Jboss Container). –

+0

Dwa uszy, które mówią tutaj, to inna wersja tej samej aplikacji? –

+0

Nie, są to różne aplikacje używające różnych wersji tej samej biblioteki, ale ich zadania są wywoływane przez kwarc, który jest kontrolowany przez ten sam kontener (JBoss) i to jest problem. –