4.3.6. Fehlerbehebung und Auflösung von Seam 2.2 Booking Archive Deployment Fehlern und Ausnahmen
Wichtig
Prozedur 4.10. Fehlerbehebung und Auflösung von Deployment-Fehlern und Ausnahmen
- Problem - java.lang.ClassNotFoundException: javax.faces.FacesExceptionWenn Sie die Applikation deployen, so enthält das Protokoll den folgenden Fehler:
ERROR \[org.jboss.msc.service.fail\] (MSC service thread 1-1) MSC00001: Failed to start service jboss.deployment.subunit."jboss-seam-booking.ear"."jboss-seam-booking.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."jboss-seam-booking.ear"."jboss-seam-booking.war".POST_MODULE: Failed to process phase POST_MODULE of subdeployment "jboss-seam-booking.war" of deployment "jboss-seam-booking.ear" (.. additional logs removed ...) Caused by: java.lang.ClassNotFoundException: javax.faces.FacesException from \[Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader\] at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191)Was es bedeutet:Die ClassNotFoundException zeigt eine fehlende Abhängigkeit an. In diesem Fall kann sie die Klasse
javax.faces.FacesExceptionnicht finden, und Sie müssen die Abhängigkeit ausdrücklich hinzufügen.Um das Problem zu beseitigen:Suchen Sie den Modulnamen für diese Klasse im
EAP6_HOME/modules/system/layers/base/-Verzeichnis, indem Sie nach einem Pfad suchen, der mit der fehlenden Klasse übereinstimmt. In diesem Fall finden Sie 2 übereinstimmende Module:javax/faces/api/main javax/faces/api/1.2
Beide Module besitzen denselben Modulnamen:javax.faces.apiaber eines im Hauptverzeichnis ist für SF 2.0 und das im 1.2-Verzeichnis ist für JSF 1.2. Falls nur ein Modul verfügbar wäre, so könnten Sie einfach eineMANIFEST.MF-Datei erstellen und die Modulabhängigkeit hinzufügen. Aber in diesem Fall wollen Sie die JSF 1.2 Version und nicht die 2.0 Version im Hauptverzeichnis verwenden, weshalb Sie eine festlegen und die andere ausschließen müssen. Um dies zu tun, erstellen Sie einejboss-deployment-structure.xml-Datei imMETA-INF/-Verzeichnis des EAR, die die folgenden Daten enthält:<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>Imdeployment-Abschnitt fügen Sie die Abhängigkeit für dasjavax.faces.apifür das JSF 1.2 Modul hinzu. Sie fügen außerdem die Abhängigkeit für das JSF 1.2 Modul im Subdeployment-Abschnitt für das WAR hinzu und schließen das Modul für JSF 2.0 aus.Deployen Sie die Applikation, indem Sie dieEAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed-Datei löschen und eine leerejboss-seam-booking.ear.dodeploy-Datei in demselben Verzeichnis erstellen. - Problem - java.lang.ClassNotFoundException: org.apache.commons.logging.LogWenn Sie die Applikation deployen, so enthält das Protokoll den folgenden Fehler:
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-8) MSC00001: Failed to start service jboss.deployment.unit."jboss-seam-booking.ear".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."jboss-seam-booking.ear".INSTALL: Failed to process phase INSTALL of deployment "jboss-seam-booking.ear" (.. additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.Log from [Module "deployment.jboss-seam-booking.ear.jboss-seam-booking.war:main" from Service Module Loader]Was es bedeutet:Die
ClassNotFoundExceptionzeigt eine fehlende Abhängigkeit an. In diesem Fall kann sie die Klasseorg.apache.commons.logging.Lognicht finden, und Sie müssen die Abhängigkeit ausdrücklich hinzufügen.Um das Problem zu beseitigen:Suchen Sie den Modulnamen für diese Klasse im
EAP6_HOME/modules/system/layers/base/-Verzeichnis, indem Sie nach einem Pfad suchen, der mit der fehlenden Klasse übereinstimmt. In diesem Fall finden Sie ein Modul, das mit dem Pfadorg/apache/commons/logging/übereinstimmt. Der Modulname lautet “org.apache.commons.logging”.Bearbeiten Sie diejboss-deployment-structure.xml-Datei, um die Modulabhängigkeit zum Deployment-Abschnitt der Datei hinzuzufügen.<module name="org.apache.commons.logging" export="true"/>
Diejboss-deployment-structure.xmlsollte nun wie folgt aussehen:<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> <module name="org.apache.commons.logging" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>Deployen Sie die Applikation, indem Sie dieEAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed-Datei löschen und eine leerejboss-seam-booking.ear.dodeploy-Datei in demselben Verzeichnis erstellen. - Problem - java.lang.ClassNotFoundException: org.dom4j.DocumentExceptionWenn Sie die Applikation deployen, so enthält das Protokoll den folgenden Fehler:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-3) Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener: java.lang.NoClassDefFoundError: org/dom4j/DocumentException (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException from [Module "deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from Service Module Loader]Was es bedeutet:Die
ClassNotFoundExceptionzeigt eine fehlende Abhängigkeit an. In diesem Fall kann sie die Klasseorg.dom4j.DocumentExceptionnicht finden.Um das Problem zu beseitigen:Suchen Sie den Modulnamen im
EAP6_HOME/modules/system/layers/base/-Verzeichnis, indem Sie nach derorg/dom4j/DocumentExceptionsuchen. Der Modulname ist “org.dom4j”. Bearbeiten Sie diejboss-deployment-structure.xml-Datei, um die Modulabhängigkeit zum Deployment-Abschnitt der Datei hinzuzufügen.<module name="org.dom4j" export="true"/>
Diejboss-deployment-structure.xml-Datei sollte nun wie folgt aussehen:<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> <module name="org.apache.commons.logging" export="true"/> <module name="org.dom4j" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>Deployen Sie die Applikation, indem Sie dieEAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed-Datei löschen und eine leerejboss-seam-booking.ear.dodeploy-Datei in demselben Verzeichnis erstellen. - Problem - java.lang.ClassNotFoundException: org.hibernate.validator.InvalidValueWenn Sie die Applikation deployen, so enthält das Protokoll den folgenden Fehler:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-6) Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener: java.lang.RuntimeException: Could not create Component: org.jboss.seam.international.statusMessages (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.hibernate.validator.InvalidValue from [Module "deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from Service Module Loader]Was es bedeutet:Die
ClassNotFoundExceptionzeigt eine fehlende Abhängigkeit an. In diesem Fall kann sie die Klasseorg.hibernate.validator.InvalidValuenicht finden.Um das Problem zu beseitigen:Es gibt ein Modul für “org.hibernate.validator”, aber das JAR enthält die
org.hibernate.validator.InvalidValue-Klasse nicht, so dass das Hinzufügen der Modulabhängigkeit das Problem nicht behebt. In diesem Fall war das die Klasse enthaltende JAR Teil des JBoss EAP 5.X Deployments. Suchen Sie das JAR, das die fehlende Klasse imEAP5_HOME/seam/lib/-Verzeichnis enthält. Um dies zu tun öffnen Sie eine Konsole und geben Sie das folgende ein:$ cd EAP5_HOME/seam/lib $ grep 'org.hibernate.validator.InvalidValue' `find . -name '*.jar'`
Das Ergebnis zeigt:$ Binary file ./hibernate-validator.jar matches $ Binary file ./test/hibernate-all.jar matches
In diesem Fall kopieren Sie dashibernate-validator.jarin dasjboss-seam-booking.ear/lib/-Verzeichnis:$ cp EAP5_HOME/seam/lib/hibernate-validator.jar jboss-seam-booking.ear/lib
Deployen Sie die Applikation, indem Sie dieEAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed-Datei löschen und eine leerejboss-seam-booking.ear.dodeploy-Datei in demselben Verzeichnis erstellen. - Problem - java.lang.InstantiationException: org.jboss.seam.jsf.SeamApplicationFactoryWenn Sie die Applikation deployen, so enthält das Protokoll den folgenden Fehler:
INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-7) Unsanitized stacktrace from failed start...: com.sun.faces.config.ConfigurationException: Factory 'javax.faces.application.ApplicationFactory' was not configured properly. at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:296) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4] (... additional logs removed ...) Caused by: javax.faces.FacesException: org.jboss.seam.jsf.SeamApplicationFactory at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:606) [jsf-api-1.2_13.jar:1.2_13-b01-FCS] (... additional logs removed ...) at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:294) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4] ... 11 more Caused by: java.lang.InstantiationException: org.jboss.seam.jsf.SeamApplicationFactory at java.lang.Class.newInstance0(Class.java:340) [:1.6.0_25] at java.lang.Class.newInstance(Class.java:308) [:1.6.0_25] at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:604) [jsf-api-1.2_13.jar:1.2_13-b01-FCS] ... 16 more
Was es bedeutet:Die
com.sun.faces.config.ConfigurationExceptionundjava.lang.InstantiationExceptionzeigen ein Abhängigkeitenproblem an. In diesem Fall ist die Ursache nicht offenkundig.Um das Problem zu beseitigen:Sie müssen das Modul finden, das die
com.sun.faces-Klassen enthält. Es gibt zwar keincom.sun.faces-Modul, aber es gibt zweicom.sun.jsf-impl-Module. Eine schnelle Prüfung desjsf-impl-1.2_13.jarim 1.2-Verzeichnis zeigt diecom.sun.faces-Klassen. Wie bei derjavax.faces.FacesExceptionClassNotFoundExceptionwollen Sie die JSF 1.2 Version und nicht die JSF 2.0 Version im Hauptverzeichnis, daher müssen Sie eines festlegen und das andere ausschließen. Sie müssen diejboss-deployment-structure.xmlbearbeiten, um die um die Modulabhängigkeit zum Deployment-Abschnitt der Datei hinzuzufügen. Sie müssen es auch zum WAR-Subdeployment hinzufügen und das JSF 2.0 Modul ausschließen. Die Datei sollte jetzt so aussehen:<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> <module name="com.sun.jsf-impl" slot="1.2" export="true"/> <module name="org.apache.commons.logging" export="true"/> <module name="org.dom4j" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> <module name="com.sun.jsf-impl" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> <module name="com.sun.jsf-impl" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>Deployen Sie die Applikation, indem Sie dieEAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed-Datei löschen und eine leerejboss-seam-booking.ear.dodeploy-Datei in demselben Verzeichnis erstellen. - Problem - java.lang.ClassNotFoundException: org.apache.commons.collections.ArrayStackWenn Sie die Applikation deployen, so enthält das Protokoll den folgenden Fehler:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-1) Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! org.apache.commons.collections.ArrayStack from [Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader] (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.ArrayStack from [Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader]Was es bedeutet:Die
ClassNotFoundExceptionzeigt eine fehlende Abhängigkeit an. In diesem Fall kann sie die Klasseorg.apache.commons.collections.ArrayStacknicht finden.Um das Problem zu beseitigen:Suchen Sie den Modulnamen im
EAP6_HOME/modules/system/layers/base/-Verzeichnis, indem Sie nach demorg/apache/commons/collections-Pfad suchen. Der Modulname lautet “org.apache.commons.collections”. Bearbeiten Sie diejboss-deployment-structure.xml, um dem Deployment-Abschnitt der Datei die Modulabhängigkeit hinzuzufügen.<module name="org.apache.commons.collections" export="true"/>
Diejboss-deployment-structure.xml-Datei sollte nun wie folgt aussehen:<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> <module name="com.sun.jsf-impl" slot="1.2" export="true"/> <module name="org.apache.commons.logging" export="true"/> <module name="org.dom4j" export="true"/> <module name="org.apache.commons.collections" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> <module name="com.sun.jsf-impl" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> <module name="com.sun.jsf-impl" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>Deployen Sie die Applikation, indem Sie dieEAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed-Datei löschen und eine leerejboss-seam-booking.ear.dodeploy-Datei in demselben Verzeichnis erstellen. - Problem - Dienste mit fehlenden/nicht verfügbaren AbhängigkeitenWenn Sie die Applikation deployen, so enthält das Protokoll den folgenden Fehler:
ERROR [org.jboss.as.deployment] (DeploymentScanner-threads - 2) {"Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"Services with missing/unavailable dependencies" => ["jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.AuthenticatorAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.AuthenticatorAction/em\" ]","jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.HotelSearchingAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".HotelSearchingAction.\"env/org.jboss.seam.example.booking.HotelSearchingAction/em\" ]"," (... additional logs removed ...) "jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.BookingListAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".BookingListAction.\"env/org.jboss.seam.example.booking.BookingListAction/em\" ]","jboss.persistenceunit.\"jboss-seam-booking.ear/jboss-seam-booking.jar#bookingDatabase\" missing [ jboss.naming.context.java.bookingDatasource ]"]}}}Was es bedeutet:Wenn Sie einen “Services with missing/unavailable dependencies”-Fehler erhalten, sehen Sie sich den Text innerhalb der Klammern nach “missing” an. In diesem Fall sehen Sie:
missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.AuthenticatorAction/em\" ]
Das “/em” steht für ein Problem mit dem Entity Manager und der Datenquelle.Um das Problem zu beseitigen:Bei der JBoss EAP 6 wurde die Datenquellenkonfiguration geändert und muss in der
EAP6_HOME/standalone/configuration/standalone.xml-Datei definiert werden. Da die JBoss EAP 6 mit einer bereits in derstandalone.xml-Datei definierten Datenbank geliefert wird, bearbeiten Sie diepersistence.xml-Datei so, dass Sie die Beispieldatenbank in dieser Applikation verwendet. Wenn Sie sich diestandalone.xml-Datei ansehen, so sehen Sie, dass derjndi-namefür die Beispieldatenbankjava:jboss/datasources/ExampleDSist. Bearbeiten Sie diejboss-seam-booking.jar/META-INF/persistence.xml-Datei, um das bestehendejta-data-source-Element auszukommentieren und wie folgt zu ersetzen:<!-- <jta-data-source>java:/bookingDatasource</jta-data-source> --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
Deployen Sie die Applikation, indem Sie dieEAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed-Datei löschen und eine leerejboss-seam-booking.ear.dodeploy-Datei in demselben Verzeichnis erstellen. - An diesem Punkt deployt die Applikation ohne Fehler, wenn Sie jedoch auf die URL http://localhost:8080/seam-booking/ in einem Browser zugreifen und "Account Login" versuchen, so erhalten Sie einen Runtime-Fehler “The page isn't redirecting properly”. Im nächsten Schritt lernen Sie wie Sie Runtime-Fehler beheben.Um mehr zur Fehlerbehebung und der Auflösung von Runtime-Problemen zu erfahren, klicken Sie hier: Abschnitt 4.3.7, »Fehlerbehebung und Auflösung von Seam 2.2 Booking Archive Runtime Fehlern und Ausnahmen«Um zum vorherigen Thema zurückzukehren, klicken Sie hier: Abschnitt 4.3.4, »Migration des Seam 2.2 Buchungsarchivs zur JBoss EAP 6: Schritt-für-Schritt Anleitung«

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.