4.3.7. Depuração e Resolução de erros e exceções do Seam 2.2 Booking Archive Runtime
Importante
Procedimento 4.17. Depuração e resolução das exceções e erros do período de rodagem
- Problema - javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in context ''Quando você acessa o URL http://localhost:8080/seam-booking/ num navegador, você obterá uma mensagem "A página não está redirecionando a propriedade" 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 Enterprise Application Plataform 6, de forma que você precisa modificar os nomes de busca para seguir as novas regras.Como resolver isto:Para depurar isto, observe no rastreamento do log servidor antecedente ao que o JNDI binding foi usado. Você poderá observar o seguinte no log do servidor:
Existe o total de oito NFO JNDI bindings listados no log, um para cada bean: RegisterAction, BookingListAction, HotelBookingAction, AuthenticatorAction, ChangePasswordAction, HotelSearchingAction, EjbSynchronizations, and TimerServiceDispatcher. Você precisa modificar o arquivo15: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 ...]lib/components.xmldo WAR para usar o novo JNDI bindings. No log, perceba que todos os EJB JNDI bindings iniciam com "java:app/jboss-seam-booking.jar". Substitua o elementocore:initconforme o seguinte:Em seguida, você precisa adicionar o EjbSynchronizations e TimerServiceDispatcher JNDI bindings. Adicione os seguintes componentes 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"/>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"/><?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 apenas deletando o arquivostandalone/deployments/jboss-seam-booking.ear.failede criando um arquivojboss-seam-booking.ear.dodeployvazio no mesmo diretório. - Erros do período de execução que devem ser resolvidos.A partir daqui, o seu aplicativo implanta e executa sem erro. Quando você acessar o URL http://localhost:8080/seam-booking/ num navegador, você estará apto a entrar com êxito.Clique na Seção 4.3.4, “Migração do Seam 2.2 Booking Archive ao JBoss Enterprise Application Plataform 6: Instruções de Etapa-por-Etapa” para retornar ao tópico anterior.