4.3.7. Depuração e Resolução de Exceções e Erros de Tempo de Execução do Arquivo do Seam 2.2 Booking
Importante
Procedimento 4.11. Depuração e resolução de exceções e erros de tempo de execução
- Problema - javax.naming.NameNotFoundException: Nome 'jboss-seam-booking' não encontrado em contexto''Quando um URL http://localhost:8080/seam-booking/ é acessado em um navegador, a mensagem "A página não está sendo redirecionada de forma apropriada" aparece e o log contém o seguinte erro:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow O que significa:Um
NameNotFoundException
indica um problema de nomeação JNDI. As regras de nomeação JNDI foram alteradas no JBoss EAP 6, portanto é necessário modificar os nomes de busca para que as novas regras sejam cumpridas.Como resolver isto:Para depurar isto, veja qual vinculação JNDI foi usada no rastreamento de log do servidor. Ao observar o log do servidor, você encontra o seguinte:
Existe um total de oito vinculações INFO JNDI listadas no log, uma para cada bean de sessão: RegisterAction, BookingListAction, HotelBookingAction, AuthenticatorAction, ChangePasswordAction, HotelSearchingAction, EjbSynchronizations e TimerServiceDispatcher. Será necessário modificar o arquivoCopy to Clipboard Copied! Toggle word wrap Toggle overflow lib/components.xml
WAR para usar as novas vinculações JNDI. No log, observe que todas as vinculações EJB JNDI começam com "java:app/jboss-seam-booking.jar". Substitua o elementocore:init
como a seguir:Em seguida, é preciso adicionar as vinculações JNDI EjbSynchronizations e TimerServiceDispatcher. Adicione os seguintes elementos do componente ao arquivo:<!-- <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 O arquivo components.xml deve parecer-se com o seguinte:<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 Reimplante o aplicativo excluindo o arquivostandalone/deployments/jboss-seam-booking.ear.failed
e criando um arquivo em brancojboss-seam-booking.ear.dodeploy
no mesmo diretório. - Problema - O aplicativo é implantado e executado sem erros. Quando o URL http://localhost:8080/seam-booking/ é acessado em um navegador e você tenta fazer o login, ocorre uma falha e a seguinte mensagem aparece "Falha ao fazer login. Falha na transação". Você deve encontrar um rastreio de exceções no log do servidor:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow O que significa:ClassNotFoundException indica a falta de uma biblioteca Hibernate. Neste caso, trata-se de
hibernate-core.jar
.Como resolver isto:Copie o
hibernate-core.jar
JAR do diretórioEAP5_HOME/seam/lib/
para o diretóriojboss-seam-booking.ear/lib
.Reimplante o aplicativo excluindo o arquivostandalone/deployments/jboss-seam-booking.ear.failed
e criando um arquivo em brancojboss-seam-booking.ear.dodeploy
no mesmo diretório. - Problema - O aplicativo é implantado e executado sem erros. Quando o URL http://localhost:8080/seam-booking/ é acessado em um navegador, você consegue efetuar o login com sucesso. No entanto, ao tentar reservar um hotel, você encontra um rastreio de exceções.Para depurar isto, você deve remover primeiro
jboss-seam-booking.ear/jboss-seam-booking.war/WEB-INF/lib/jboss-seam-debug.jar
, já que mascara o erro verdadeiro. A esta altura, o seguinte erro pode ser observado: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 O que significa:NoClassDefFoundError indica a falta de uma biblioteca Hibernate.
Como resolver isto:Copie os JARs
hibernate-annotations.jar
ehibernate-commons-annotations.jar
do diretórioEAP5_HOME/seam/lib/
para o diretóriojboss-seam-booking.ear/lib
.Reimplante o aplicativo excluindo o arquivostandalone/deployments/jboss-seam-booking.ear.failed
e criando um arquivo em brancojboss-seam-booking.ear.dodeploy
no mesmo diretório. - Os erros do aplicativo e de tempo de execução devem ser resolvidos.A esta altura, o aplicativo é implantado e executado sem erros.Clique aqui Seção 4.3.4, “Migração do Arquivo do Seam 2.2 Booking para JBoss EAP 6: Instruções Passo a Passo” para retornar ao tópico anterior.