4.3.7. Fehlerbehebung und Auflösung von Seam 2.2 Booking Archive Runtime Fehlern und Ausnahmen
Wichtig
Prozedur 4.11. Fehlerbehebung und Auflösung von Runtime-Fehlern und Ausnahmen
- Problem - javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in context ''Wenn Sie auf die URL http://localhost:8080/seam-booking/ in einem Browser zugreifen, so wird "The page isn't redirecting properly" gemeldet und das Protokoll enthält den folgenden Fehler:
SEVERE [org.jboss.seam.jsf.SeamPhaseListener] (http--127.0.0.1-8080-1) swallowing exception: java.lang.IllegalStateException: Could not start transaction at org.jboss.seam.jsf.SeamPhaseListener.begin(SeamPhaseListener.java:598) [jboss-seam.jar:] (... log messages removed ...) Caused by: org.jboss.seam.InstantiationException: Could not instantiate Seam component: org.jboss.seam.transaction.synchronizations at org.jboss.seam.Component.newInstance(Component.java:2170) [jboss-seam.jar:] (... log messages removed ...) Caused by: javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in context '' at org.jboss.as.naming.util.NamingUtils.nameNotFoundException(NamingUtils.java:109) (... log messages removed ...)
Das bedeutet:Eine
NameNotFoundExceptiondeutet ein Problem bei der JNDI-Namensgebung an. Die Regeln für die JNDI-Namensgebung haben sich bei der JBoss EAP 6 geändert, so dass Sie die Lookup-Namen bearbeiten müssen, damit diese den neuen Regeln folgen.So beseitigen Sie das Problem:Um diesen Fehler zu beheben, sehen Sie im Serverprotokoll nach, welches JNDI-Binding verwendet wurde. Im Serverprotokoll sehen Sie dies:
15:01:16,138 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-1) JNDI bindings for session bean named RegisterAction in deployment unit subdeployment "jboss-seam-booking.jar" of deployment "jboss-seam-booking.ear" are as follows: java:global/jboss-seam-booking/jboss-seam-booking.jar/RegisterAction!org.jboss.seam.example.booking.Register java:app/jboss-seam-booking.jar/RegisterAction!org.jboss.seam.example.booking.Register java:module/RegisterAction!org.jboss.seam.example.booking.Register java:global/jboss-seam-booking/jboss-seam-booking.jar/RegisterAction java:app/jboss-seam-booking.jar/RegisterAction java:module/RegisterAction [JNDI bindings continue ...]
Insgesamt sind acht INFO JNDI-Bindings im Protokoll aufgeführt, eines für jedes Session-Bean: RegisterAction, BookingListAction, HotelBookingAction, AuthenticatorAction, ChangePasswordAction, HotelSearchingAction, EjbSynchronizations und TimerServiceDispatcher. Sie müssen dielib/components.xml-Datei des WARs so bearbeiten, dass es die neuen JNDI-Bindings verwendet. Beachten Sie bitte, dass im Protokoll die EJB JNDI-Bindings alle mit "java:app/jboss-seam-booking.jar" beginnen. Ersetzen Sie dascore:init-Element wie folgt:<!-- <core:init jndi-pattern="jboss-seam-booking/#{ejbName}/local" debug="true" distributable="false"/> --> <core:init jndi-pattern="java:app/jboss-seam-booking.jar/#{ejbName}" debug="true" distributable="false"/>Als nächstes müssen Sie die EjbSynchronizations und TimerServiceDispatcher JNDI-Bindings hinzufügen. Fügen Sie der Datei die folgenden Komponentenelemente hinzu:<component class="org.jboss.seam.transaction.EjbSynchronizations" jndi-name="java:app/jboss-seam/EjbSynchronizations"/> <component class="org.jboss.seam.async.TimerServiceDispatcher" jndi-name="java:app/jboss-seam/TimerServiceDispatcher"/>
Die components.xml-Datei sollte jetzt wie folgt aussehen:<?xml version="1.0" encoding="UTF-8"?> <components xmlns="http://jboss.com/products/seam/components" xmlns:core="http://jboss.com/products/seam/core" xmlns:security="http://jboss.com/products/seam/security" xmlns:transaction="http://jboss.com/products/seam/transaction" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.2.xsd http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.2.xsd http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.2.xsd http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.2.xsd"> <!-- <core:init jndi-pattern="jboss-seam-booking/#{ejbName}/local" debug="true" distributable="false"/> --> <core:init jndi-pattern="java:app/jboss-seam-booking.jar/#{ejbName}" debug="true" distributable="false"/> <core:manager conversation-timeout="120000" concurrent-request-timeout="500" conversation-id-parameter="cid"/> <transaction:ejb-transaction/> <security:identity authenticate-method="#{authenticator.authenticate}"/> <component class="org.jboss.seam.transaction.EjbSynchronizations" jndi-name="java:app/jboss-seam/EjbSynchronizations"/> <component class="org.jboss.seam.async.TimerServiceDispatcher" jndi-name="java:app/jboss-seam/TimerServiceDispatcher"/> </components>Deployen Sie die Applikation, indem Sie diestandalone/deployments/jboss-seam-booking.ear.failed-Datei löschen und eine leerejboss-seam-booking.ear.dodeploy-Datei in demselben Verzeichnis erstellen. - Problem - Die Applikation deployt und läuft ohne Fehler. Wenn Sie auf die URL http://localhost:8080/seam-booking/ in einem Browser zugreifen und versuchen sich anzumelden, wird es mit der Meldung "Anmeldung fehlgeschlagen. Transaktion fehlgeschlagen." scheitern. Sie sollten eine Exception Trace im Serverprotokoll sehen:
13:36:04,631 WARN [org.jboss.modules] (http-/127.0.0.1:8080-1) Failed to define class org.jboss.seam.persistence.HibernateSessionProxy in Module "deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from Service Module Loader: java.lang.LinkageError: Failed to link org/jboss/seam/persistence/HibernateSessionProxy (Module "deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from Service Module Loader) .... Caused by: java.lang.LinkageError: Failed to link org/jboss/seam/persistence/HibernateSessionProxy (Module "deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from Service Module Loader) ... Caused by: java.lang.NoClassDefFoundError: org/hibernate/engine/SessionImplementor at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.7.0_45] ... Caused by: java.lang.ClassNotFoundException: org.hibernate.engine.SessionImplementor from [Module "deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from Service Module Loader] ...
Das bedeutet:Die ClassNotFoundException weist auf eine fehlende Hibernate Bibliothek hin. In diesem Fall ist es das
hibernate-core.jar.So beseitigen Sie das Problem:Kopieren Sie das
hibernate-core.jarJAR aus demEAP5_HOME/seam/lib/Verzeichnis insjboss-seam-booking.ear/libVerzeichnis.Deployen Sie die Applikation, indem Sie diestandalone/deployments/jboss-seam-booking.ear.failed-Datei löschen und eine leerejboss-seam-booking.ear.dodeploy-Datei in demselben Verzeichnis erstellen. - Problem - Die Applikation deployt und läuft ohne Fehler. Wenn Sie auf die URL http://localhost:8080/seam-booking/ in einem Browser zugreifen, können Sie sich erfolgreich anmelden. Wenn Sie aber versuchen ein Hotel zu buchen, sehen Sie eine Exception Trace.Um diesen Fehler zu bereinigen müssen Sie zuerst das
jboss-seam-booking.ear/jboss-seam-booking.war/WEB-INF/lib/jboss-seam-debug.jarentfernen, da es den wahren Fehler verdeckt. An dieser Stelle sollten Sie folgenden Fehler sehen:java.lang.NoClassDefFoundError: org/hibernate/annotations/common/reflection/ReflectionManager
Das bedeutet:Der NoClassDefFoundError weist auf eine fehlende Hibernate Bibliothek hin.
So beseitigen Sie das Problem:Kopieren Sie die
hibernate-annotations.jarundhibernate-commons-annotations.jarJARs aus demEAP5_HOME/seam/lib/Verzeichnis insjboss-seam-booking.ear/libVerzeichnis.Deployen Sie die Applikation, indem Sie diestandalone/deployments/jboss-seam-booking.ear.failed-Datei löschen und eine leerejboss-seam-booking.ear.dodeploy-Datei in demselben Verzeichnis erstellen. - Runtime- und Applikationsfehler sollten behoben sein.An diesem Punkt deployt und läuft die Applikation ohne Fehler.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.