4.3.7. Depuración y resolución de errores y excepciones en tiempo de ejecución del archivador de reservas Seam 2.2
Importante
Procedimiento 4.11. Depuración y resolución de excepciones y errores en tiempo de ejecución
- Emita - javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in context ''Cuando accede la URL http://localhost:8080/seam-booking/ en un navegador, obtiene un mensaje que dice "La página no está redireccionando apropiadamente" y el registro contiene el siguiente error:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Lo que significa:Una
NameNotFoundException
indica un problema de nombrado JNDI. Las reglas de nombrado JNDI han cambiado en JBoss EAP 6 así que necesita modificar los nombres de búsqueda para seguir las nuevas reglas.Para resolverlo:Para depurar esto, busque en la parte anterior del rastro del registro del servidor para ver qué enlace JNDI se utilizó. Al mirar en el registro del servidor puede ver esto:
Hay un total de ocho enlaces INFO JNDI listados en el registro, uno para cada bean de sesión: RegisterAction, BookingListAction, HotelBookingAction, AuthenticatorAction, ChangePasswordAction, HotelSearchingAction, EjbSynchronizations y TimerServiceDispatcher. Necesita modificar el archivoCopy to Clipboard Copied! Toggle word wrap Toggle overflow lib/components.xml
del WAR para usar los nuevos enlaces JNDI. En el registro, note que todos los enlaces EJB JNDI empienzan por "java:app/jboss-seam-booking.jar" Reemplace el elementocore:init
así:Luego, necesita agregar los enlaces JNDI EjbSynchronizations y TimerServiceDispatcher. Agregue los siguientes elementos de componente al archivo:<!-- <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: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"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow El archivo components.xml ahora se debe ver así:<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"/>
<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"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vuelva a implementar la aplicación borrando el archivostandalone/deployments/jboss-seam-booking.ear.failed
y creando un archivo en blancojboss-seam-booking.ear.dodeploy
en el mismo directorio. - Problema - la aplicación se implementa y ejecuta sin errores. Cuando accede la URL http://localhost:8080/seam-booking/ en un navegador y trata de iniciar sesión, falla y presenta el mensaje "Inicio de sesión fallido. Transacción fallida". Debe ver un rastro de excepción en el registro del servidor:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Lo que significa:La ClassNotFoundException indica que falta una biblioteca Hibernate. En este caso es la
hibernate-core.jar
.Para resolverlo:Copie la JAR
hibernate-core.jar
del directorioEAP5_HOME/seam/lib/
al directoriojboss-seam-booking.ear/lib
.Vuelva a implementar la aplicación borrando el archivostandalone/deployments/jboss-seam-booking.ear.failed
y creando un archivo en blancojboss-seam-booking.ear.dodeploy
en el mismo directorio. - Problema - la aplicación se implementa y ejecuta sin errores. Cuando accede la URL http://localhost:8080/seam-booking/ en un navegador, puede iniciar sesión de manera exitosa. Sin embargo, cuando trata de reservar un hotel verá un rastro de excepción.Para depurar esto, primero debe borrar la
jboss-seam-booking.ear/jboss-seam-booking.war/WEB-INF/lib/jboss-seam-debug.jar
ya que enmascara el error verdadero. En este momento debe ver el siguiente error:java.lang.NoClassDefFoundError: org/hibernate/annotations/common/reflection/ReflectionManager
java.lang.NoClassDefFoundError: org/hibernate/annotations/common/reflection/ReflectionManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Lo que significa:La NoClassDefFoundError indica que falta una biblioteca Hibernate.
Para resolverlo:Copie las JARs
hibernate-annotations.jar
yhibernate-commons-annotations.jar
del directorioEAP5_HOME/seam/lib/
al directoriojboss-seam-booking.ear/lib
.Vuelva a implementar la aplicación borrando el archivostandalone/deployments/jboss-seam-booking.ear.failed
y creando un archivo en blancojboss-seam-booking.ear.dodeploy
en el mismo directorio. - Se deben resolver los errores de tiempo de ejecución y de las aplicacionesEn este punto, la aplicación se implementa y ejecuta sin errores.Para regresar al tema anterior haga clic aquí: Sección 4.3.4, “Migración del archivador de reservas de Seam 2.2 a JBoss EAP 6: instrucciones paso por paso”