JBoss: Implementierung schlägt fehl mit " ClassNotFoundException, obwohl die Klasse ist da - JaxrsScanningProcessor
Habe ich eine war-Datei mit REST-services. Setzt es Prima in der JBoss EAP 6.2 (entspricht 7 an.etwas) in den standalone-Modus, aber es funktioniert nicht manchmal - aber oft - im domain-Modus mit einer ClassNotFoundException für meine Unterklasse der die JAX-RS-Application-Klasse, auch wenn es in den Krieg (gut, es läuft auch standalone). Da es manchmal funktioniert, ich vermute, es gibt einige Parallelität Problem, das führt zu JBoss versuchen, um die Klasse laden, bevor Sie es sehen können.
Dies ist der Fehler:
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Fehler beim starten service jboss.- Bereitstellung.Einheit.myapp.POST_MODULE: org.jboss.msc.service.StartException in service jboss.- Bereitstellung.Einheit.myapp.POST_MODULE: JBAS018733: Fehler beim verarbeiten des phase POST_MODULE der Bereitstellung "myapp" bei org.jboss.als.server.- Bereitstellung.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:127) ... Verursacht durch: org.jboss.als.server.- Bereitstellung.DeploymentUnitProcessingException: JBAS011230: Konnte nicht geladen, JAX-RS Application-Klasse bei org.jboss.als.jaxrs.- Bereitstellung.JaxrsScanningProcessor.scan(JaxrsScanningProcessor.java:218) bei org.jboss.als.jaxrs.- Bereitstellung.JaxrsScanningProcessor.bereitstellen(JaxrsScanningProcessor.java:100) bei org.jboss.als.server.- Bereitstellung.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:120) [jboss-as-server-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] ... 5 mehr Verursacht durch: java.lang.ClassNotFoundException: myapp.rs.RestApplication von [Modul "deployment.Anwendung:main" - von Service-Modul-Lader] bei org.jboss.Module.ModuleClassLoader.findClass(ModuleClassLoader.java:197) [jboss-Module.jar:1.3.0.Final-redhat-2] ... bei org.jboss.Module.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:118) [jboss-Module.jar:1.3.0.Final-redhat-2] bei org.jboss.als.jaxrs.- Bereitstellung.JaxrsScanningProcessor.scan(JaxrsScanningProcessor.java:214) ... 7 mehr
Der Klasse gibt es:
[jboss/domain]$ unzip-l data/content/6c/0ffc675ff1c2254540b6e8caffc0d2605ed549/content | grep RestApp 2262 02-13-14 09:05 WEB-INF/classes/myapp/rs/RestApplication.class
Dies ist, wie ich im Einsatz (mein Benutzer != die Benutzer ausführen jboss, ob das einen Unterschied macht):
me$ /opt/jboss/bin/jboss-cli.sh -c --controller=0.0.0.0:49999 --user=admin --password=***
[domain@0.0.0.0:49999 /] deploy /vagrant/myapp.war --all-server-groups
Schlägt die Bereitstellung in der gleichen Weise ausgeführt, wenn Sie über die web-Admin-Konsole. Die Bereitstellung eigenständige erfolgt durch kopieren der .Krieg der standalone/deployments/
Verzeichnis.
Irgendwelche Tipps?
Config info
- JBoss EAP 6.2
- Rest Einfach 3.0.6 (anstelle der Standard-2.x-Modul)
- Wir haben keine JAX-RS Zeug in
web.xml
abgesehen von derresteasy.servlet.mapping.prefix
context-param; wir verwenden dieresteasy-servlet-initializer
Bibliothek statt der manuellen Konfiguration einer servlet oder ähnliches drin
WEB-INF/lib/
.InformationsquelleAutor Jakub Holy | 2014-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, ich habe das problem behoben, indem alle resteasy/jaxrs/jboss-Bibliotheken aus der war-Datei ist
WEB-INF/lib/
.Habe ich bemerkt, die Krieg enthalten viele Bibliotheken es sollte nicht, wie resteasy-jaxrs-3.0.6.Final.jar, jboss-jaxr-api_1.0_spec-1.0.0.Final.jar (die, BTW, Konflikte mit dem Rest Einfach 3.0.6), javax.servlet-api-3.1.0.jar etc.
Also ich denke mal der classloader nicht sehen/finden das Klasse, weil der classpath Hölle, die server und die webapp mit verschiedenen "Instanzen" der gleichen Bibliotheken. (Keine Ahnung, warum es funktionierte unter JBoss standalone; aber standalone hat die out-of-the-box-Konfiguration, während die Domäne angepasst wurde viel).
Habe ich auch manchmal
--runtime-name=myapp
im deployment-Befehl, der scheint falsch zu sein, ich hätte--runtime-name=myapp.war
(einschließlich der Endung).--runtime-name=myapp.war
war ein Lebensretter für mich. Danke.InformationsquelleAutor Jakub Holy
Obwohl der Autor hatte, fand eine Antwort für sich selbst, ich denke, es könnte nützlich sein, zu posten, die meine situation im Fall anderer Leute kommen über dieses Problem und die Autoren die Lösung nicht funktioniert für Sie.
Ich hatte ein ähnliches Problem bei einer Klasse wurde auch nicht gefunden beim laufen unter Redhat JBoss ALS Patrone innerhalb von Openshift, obwohl es schien unvernünftig, aber später habe ich herausgefunden, dass das Krieg ich erwartet habe zu eingesetzt werden nicht eingesetzt, stattdessen ein anderes eingesetzt wurde.
Also, wenn es gibt Möglichkeiten, ich würde führen Sie eine Suche für alle war-Dateien, die erwartet haben, dass die Klasse, entpacken Sie Sie und Suche innerhalb der Inhalte, um zu sehen, ob Sie enthalten die benötigten kompilierte Klasse. Ich wirklich empfehlen Sie versuchen, um die Suche für alle möglichen Kriege. Achten Sie auch auf mögliche YOUR_WAR.Krieg.bereitgestellt ist es sehr wahrscheinlich, gehen in den gleichen Ordner wie den Krieg, die derzeit im Einsatz sind.
In meinem Fall hatte ich diese Kriege:
Ich hatte erwartet, das Reale werden in ./app-root/runtime/repo/deployments/ROOT.war, weil das ist, wo maven war, es anzulegen, aber es scheint JBoss später hätte es zu kopieren, um ./app-root/runtime/Abhängigkeiten/jbossas_custom/deployments/ROOT.Krieg in meinem Fall ist es nicht von selbst, deshalb meine aktualisierte Krieg wurde nie eingesetzt, sondern es ging immer um bereitstellen, die alte, die war schon in ./app-root/runtime/Abhängigkeiten/jbossas_custom/deployments/ROOT.Krieg
Hoffe, dies hilft jemand auf die richtige Spur.
vielleicht genau das, was ich schrieb.
InformationsquelleAutor Arturas M