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:
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 ...)
O que significa:Um
NameNotFoundExceptionindica 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:
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 ...]
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 arquivolib/components.xmlWAR 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:initcomo a seguir:<!-- <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"/>Em seguida, é preciso adicionar as vinculações JNDI EjbSynchronizations e TimerServiceDispatcher. Adicione os seguintes elementos do componente ao arquivo:<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"/>
O arquivo components.xml deve parecer-se com o seguinte:<?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>Reimplante o aplicativo excluindo o arquivostandalone/deployments/jboss-seam-booking.ear.failede criando um arquivo em brancojboss-seam-booking.ear.dodeployno 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:
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] ...
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.jarJAR 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.failede criando um arquivo em brancojboss-seam-booking.ear.dodeployno 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
O que significa:NoClassDefFoundError indica a falta de uma biblioteca Hibernate.
Como resolver isto:Copie os JARs
hibernate-annotations.jarehibernate-commons-annotations.jardo diretórioEAP5_HOME/seam/lib/para o diretóriojboss-seam-booking.ear/lib.Reimplante o aplicativo excluindo o arquivostandalone/deployments/jboss-seam-booking.ear.failede criando um arquivo em brancojboss-seam-booking.ear.dodeployno 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.

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.