4.3.7. Déboguer et résoudre les erreurs de runtime et les exceptions de Seam 2.2 Booking Archive
Important
Procédure 4.11. Déboguer et résoudre les erreurs et les exceptions de runtime
- Problème - javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in context ''Quand vous accédez à l'URL http://localhost:8080/seam-booking/ dans un navigateur, vous obtenez "The page isn't redirecting properly" et le journal contient l'erreur suivante :
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 ...)
Ceci signifie :L'exception
NameNotFoundExceptionindique un problème de nommage JNDI. Les règles de nommage JNDI ont changé dans JBoss EAP 6, donc vous devrez modifier les noms de recherche pour qu'ils se conforment aux nouvelles règles.Comment résoudre ceci :Pour déboguer ceci, regardez plus haut dans le suivi du journal serveur quelle liaison JNDI a été utilisée. En regardant le journal de serveur vous verrez ceci :
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 ...]
Il y a un total de huit liaisons INFO JNDI figurant dans le journal, un pour chaque bean de session : RegisterAction, BookingListAction, HotelBookingAction, AuthenticatorAction, ChangePasswordAction, HotelSearchingAction, EjbSynchronizations et TimerServiceDispatcher. Vous devez modifier le fichierlib/components.xmldu WAR pour utiliser les nouvelles liaisons JNDI. Dans le journal, notez que toutes les liaisons EJB JNDI commencent avec "java: app / jboss-couture-booking.jar". Remplacer l'élémentcore:initcomme suit :<!-- <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"/>Ensuite, vous devrez ajouter les liaisons JNDI EjbSynchronizations et TimerServiceDispatcher. Ajouter les éléments de composants suivants au fichier :<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"/>
Le fichier components.xml devrait ressembler à ce qui suit :<?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>Redéployer l'application en effaçant le fichierstandalone/deployments/jboss-seam-booking.ear.failedet en créant un fichier videjboss-seam-booking.ear.dodeploydans le même répertoire. - Problème - À ce moment là, l'application se déploie et exécute sans erreur. Quand vous accédez à l'URL http://localhost:8080/seam-booking/ dans un navigateur et que vous essayez de vous connecter, vous n'y parviendrez pas, et le message suivant "Login failed. Transaction failed." apparaîtra. Vous devriez en voir une trace dans la journalisation serveur :
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] ...
Ceci signifie :L'exception ClassNotFoundException indique qu'il y a une bibliothèque manquante. Dans ce cas là, il s'agit de
hibernate-core.jar.Comment résoudre ceci :Copier les JAR(s)
hibernate-core.jaret le répertoireEAP5_HOME/seam/lib/dans le répertoirejboss-seam-booking.ear/lib.Redéployer l'application en effaçant le fichierstandalone/deployments/jboss-seam-booking.ear.failedet en créant un fichier videjboss-seam-booking.ear.dodeploydans le même répertoire. - Problème - l'application se déploie et s'exécute sans erreur. Lorsque vous accédez à l'URL http://localhost:8080/seam-booking/ dans un navigateur, vous êtes capable de vous connecter. Toutefois, lorsque vous essayez de réserver une chambre d'hôtel, vous pourrez voir une trace de l'exception.Pour déboguer ceci, vous devrez supprimer
jboss-seam-booking.ear/jboss-seam-booking.war/WEB-INF/lib/jboss-seam-debug.jarqui masque l'erreur. Puis, vous devriez voir l'erreur suivante :java.lang.NoClassDefFoundError: org/hibernate/annotations/common/reflection/ReflectionManager
Ceci signifie :L'exception NoClassDefFoundError indique qu'il manque une bibliothèque Hibernate.
Comment résoudre ceci :Copier les JAR(s)
hibernate-annotations.jarethibernate-commons-annotations.jarà partir du répertoireEAP5_HOME/seam/lib/dans le répertoirejboss-seam-booking.ear/lib.Redéployer l'application en effaçant le fichierstandalone/deployments/jboss-seam-booking.ear.failedet en créant un fichier videjboss-seam-booking.ear.dodeploydans le même répertoire. - Les erreurs de runtime et d'applications doivent être résoluesA ce point dans le temps, l'application se déploie et exécute sans erreur.Pour retourner au sujet précédent, cliquer ici : Section 4.3.4, « Migrer l'archive du Seam 2.2 Booking dans JBoss EAP 6: Instructions étape par étape »

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.