4.3.6. Depuração e Resolução de Exceções e Erros de Implantação do Arquivo do Seam 2.2 Booking
Importante
Procedimento 4.10. Depuração e resolução de exceções e erros de implantação
- Problema - java.lang.ClassNotFoundException: javax.faces.FacesExceptionQuando o aplicativo é implantado, o log contém o seguinte erro:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow O que significa:ClassNotFoundException indica uma dependência ausente. Neste caso, a classe
javax.faces.FacesExceptionnão pode ser encontrada e é necessário adicionar explicitamente a dependência.Como resolver isto:Localize o nome do módulo para aquela classe no diretório
EAP6_HOME/modules/system/layers/base/procurando por um caminho que coincida com a classe ausente. Neste caso, você encontra dois módulos que coincidem:Ambos os módulos possuem o mesmo nome de módulo:javax/faces/api/main javax/faces/api/1.2
javax/faces/api/main javax/faces/api/1.2Copy to Clipboard Copied! Toggle word wrap Toggle overflow javax.faces.api, porém aquele localizado no diretório principal é para JSF 2.0 e o outro, no diretório 1.2, é para JSF 1.2. Caso houvesse apenas um módulo disponível, seria possível simplesmente criar um arquivoMANIFEST.MFe adicionar a dependência do módulo. Mas, neste caso, você quer usar a versão JSF 1.2, e não a versão 2.0, no principal, então é necessário especificar uma e excluir a outra. Para isto, crie um arquivojboss-deployment-structure.xmlno diretório doMETA-INF/EAR que contenha os seguintes dados:Na seçãoCopy to Clipboard Copied! Toggle word wrap Toggle overflow deployment, adicione a dependência parajavax.faces.apipara o módulo JSF 1.2. Adicione também a dependência para o módulo JSF 1.2 na seção de subimplantação para o WAR e exclua o módulo para JSF 2.0.Reimplante o aplicativo deletando o arquivoEAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failede criando um arquivo em brancojboss-seam-booking.ear.dodeployno mesmo diretório. - Problema - java.lang.ClassNotFoundException: org.apache.commons.logging.LogQuando o aplicativo é implantado, o log contém o seguinte erro:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow O que significa:ClassNotFoundExceptionindica uma dependência ausente. Neste caso, a classeorg.apache.commons.logging.Lognão pode ser encontrada e é necessário adicionar explicitamente a dependência.Como resolver isto:Localize o nome do módulo para aquela classe no diretório
EAP6_HOME/modules/system/layers/base/procurando por um caminho que coincida com a classe ausente. Neste caso, você encontra um módulo que coincide com o caminhoorg/apache/commons/logging/. O nome do módulo é “org.apache.commons.logging”.Modifique o arquivojboss-deployment-structure.xmlpara adicionar a dependência do módulo à seção de implantação do arquivo.<module name="org.apache.commons.logging" export="true"/>
<module name="org.apache.commons.logging" export="true"/>Copy to Clipboard Copied! Toggle word wrap Toggle overflow jboss-deployment-structure.xmldeve parecer-se com o seguinte:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Reimplante o aplicativo deletando o arquivoEAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failede criando um arquivo em brancojboss-seam-booking.ear.dodeployno mesmo diretório. - Problema - java.lang.ClassNotFoundException: org.dom4j.DocumentExceptionQuando o aplicativo é implantado, o log contém o seguinte erro:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-3) Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener: java.lang.NoClassDefFoundError: org/dom4j/DocumentException (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException from [Module "deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from Service Module Loader]ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-3) Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener: java.lang.NoClassDefFoundError: org/dom4j/DocumentException (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException from [Module "deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from Service Module Loader]Copy to Clipboard Copied! Toggle word wrap Toggle overflow O que significa:ClassNotFoundExceptionindica uma dependência ausente. Neste caso, a classeorg.dom4j.DocumentExceptionnão pode ser encontrada.Como resolver isto:Localize o nome do módulo no diretório
EAP6_HOME/modules/system/layers/base/procurando peloorg/dom4j/DocumentException. O nome do módulo é “org.dom4j”. Modifique o arquivojboss-deployment-structure.xmlpara adicionar a dependência do módulo à seção de implantação do arquivo.O arquivo<module name="org.dom4j" export="true"/>
<module name="org.dom4j" export="true"/>Copy to Clipboard Copied! Toggle word wrap Toggle overflow jboss-deployment-structure.xmldeve parecer-se com o seguinte agora:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Reimplante o aplicativo deletando o arquivoEAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failede criando um arquivo em brancojboss-seam-booking.ear.dodeployno mesmo diretório. - Problema - java.lang.ClassNotFoundException: org.hibernate.validator.InvalidValueQuando o aplicativo é implantado, o log contém o seguinte erro:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-6) Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener: java.lang.RuntimeException: Could not create Component: org.jboss.seam.international.statusMessages (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.hibernate.validator.InvalidValue from [Module "deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from Service Module Loader]ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-6) Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener: java.lang.RuntimeException: Could not create Component: org.jboss.seam.international.statusMessages (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.hibernate.validator.InvalidValue from [Module "deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from Service Module Loader]Copy to Clipboard Copied! Toggle word wrap Toggle overflow O que significa:ClassNotFoundExceptionindica uma dependência ausente. Neste caso, a classeorg.hibernate.validator.InvalidValuenão pode ser encontrada.Como resolver isto:Existe um módulo “org.hibernate.validator”, mas o JAR não possui a classe
org.hibernate.validator.InvalidValue, portanto a adição da dependência do módulo não resolve este problema. Neste caso, o JAR contendo a classe fazia parte da implantação do JBoss EAP 5.X. Procure pelo JAR que contém a classe ausente no diretórioEAP5_HOME/seam/lib/. Para fazer isto, abra um console e digite o seguinte:O resultado apresenta o seguinte:cd EAP5_HOME/seam/lib grep 'org.hibernate.validator.InvalidValue' `find . -name '*.jar'`
$ cd EAP5_HOME/seam/lib $ grep 'org.hibernate.validator.InvalidValue' `find . -name '*.jar'`Copy to Clipboard Copied! Toggle word wrap Toggle overflow Neste caso, copieBinary file ./hibernate-validator.jar matches Binary file ./test/hibernate-all.jar matches
$ Binary file ./hibernate-validator.jar matches $ Binary file ./test/hibernate-all.jar matchesCopy to Clipboard Copied! Toggle word wrap Toggle overflow hibernate-validator.jarpara o diretóriojboss-seam-booking.ear/lib/cp EAP5_HOME/seam/lib/hibernate-validator.jar jboss-seam-booking.ear/lib
$ cp EAP5_HOME/seam/lib/hibernate-validator.jar jboss-seam-booking.ear/libCopy to Clipboard Copied! Toggle word wrap Toggle overflow Reimplante o aplicativo deletando o arquivoEAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failede criando um arquivo em brancojboss-seam-booking.ear.dodeployno mesmo diretório. - Problema - java.lang.InstantiationException: org.jboss.seam.jsf.SeamApplicationFactoryQuando o aplicativo é implantado, o log contém o seguinte erro:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow O que significa:com.sun.faces.config.ConfigurationExceptionejava.lang.InstantiationExceptionindicam um problema de dependência. Neste caso, a causa não é óbvia.Como resolver isto:Procure pelo módulo que contém as classes
com.sun.faces. Ainda que não exista um módulocom.sun.faces, existem dois móduloscom.sun.jsf-impl. Uma verificação rápida dojsf-impl-1.2_13.jarno diretório 1.2 mostra que ele contém as classescom.sun.faces. Assim como fez comjavax.faces.FacesExceptionClassNotFoundException, você deve usar a versão 1.2 JSF e não, a versão 2.0 JSF no principal, portanto você deve especificar uma e excluir a outra. A modificação dojboss-deployment-structure.xmlpara a adição da dependência do módulo é necessária na seção de implantação do arquivo. Você também precisa adicioná-la à subimplantação WAR e excluir o módulo 2.0 JSF. O arquivo deve parecer-se com o seguinte agora:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Reimplante o aplicativo deletando o arquivoEAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failede criando um arquivo em brancojboss-seam-booking.ear.dodeployno mesmo diretório. - Problema - java.lang.ClassNotFoundException: org.apache.commons.collections.ArrayStackQuando o aplicativo é implantado, o log contém o seguinte erro:
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-1) Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! org.apache.commons.collections.ArrayStack from [Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader] (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.ArrayStack from [Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader]ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-1) Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! org.apache.commons.collections.ArrayStack from [Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader] (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.ArrayStack from [Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader]Copy to Clipboard Copied! Toggle word wrap Toggle overflow O que significa:ClassNotFoundExceptionindica que uma dependência ausente. Neste caso, a classeorg.apache.commons.collections.ArrayStacknão pode ser encontrada.Como resolver isto:Localize o nome do módulo no diretório
EAP6_HOME/modules/system/layers/base/procurando pelo caminhoorg/apache/commons/collections. O nome do módulo é “org.apache.commons.collections”. Modifiquejboss-deployment-structure.xmlpara adicionar a dependência do módulo à seção de implantação do arquivo.O arquivo<module name="org.apache.commons.collections" export="true"/>
<module name="org.apache.commons.collections" export="true"/>Copy to Clipboard Copied! Toggle word wrap Toggle overflow jboss-deployment-structure.xmldeve parecer-se com o seguinte agora:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Reimplante o aplicativo deletando o arquivoEAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failede criando um arquivo em brancojboss-seam-booking.ear.dodeployno mesmo diretório. - Problema - Serviços com dependências indisponíveis/faltantesQuando o aplicativo é implantado, o log contém o seguinte erro:
ERROR [org.jboss.as.deployment] (DeploymentScanner-threads - 2) {"Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"Services with missing/unavailable dependencies" => ["jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.AuthenticatorAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.AuthenticatorAction/em\" ]","jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.HotelSearchingAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".HotelSearchingAction.\"env/org.jboss.seam.example.booking.HotelSearchingAction/em\" ]"," (... additional logs removed ...) "jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.BookingListAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".BookingListAction.\"env/org.jboss.seam.example.booking.BookingListAction/em\" ]","jboss.persistenceunit.\"jboss-seam-booking.ear/jboss-seam-booking.jar#bookingDatabase\" missing [ jboss.naming.context.java.bookingDatasource ]"]}}}ERROR [org.jboss.as.deployment] (DeploymentScanner-threads - 2) {"Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"Services with missing/unavailable dependencies" => ["jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.AuthenticatorAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.AuthenticatorAction/em\" ]","jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.HotelSearchingAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".HotelSearchingAction.\"env/org.jboss.seam.example.booking.HotelSearchingAction/em\" ]"," (... additional logs removed ...) "jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.BookingListAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".BookingListAction.\"env/org.jboss.seam.example.booking.BookingListAction/em\" ]","jboss.persistenceunit.\"jboss-seam-booking.ear/jboss-seam-booking.jar#bookingDatabase\" missing [ jboss.naming.context.java.bookingDatasource ]"]}}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow O que significa:Quando aparecer um erro “Serviços com dependências ausentes/indisponíveis”, observe o texto entre parênteses após "missing" (ausente). Segue abaixo um exemplo:
O “/em” indica um problema de fonte de dados e Gerenciador de Entidade.missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.AuthenticatorAction/em\" ]
missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.AuthenticatorAction/em\" ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow Como resolver isto:No JBoss EAP 6, a configuração da fonte de dados foi alterada e precisa ser definida no arquivo
EAP6_HOME/standalone/configuration/standalone.xml. Já que o JBoss EAP 6 é enviado junto com um exemplo de fonte de dados que já está definido no arquivostandalone.xml, modifique o arquivopersistence.xmlpara usar o exemplo da fonte de dados neste aplicativo. Quando pesquisando o arquivostandalone.xml, você verá quejndi-namepara o exemplo da fonte de dados éjava:jboss/datasources/ExampleDS. Modifique o arquivojboss-seam-booking.jar/META-INF/persistence.xmlpara comentar o elementojta-data-sourceexistente e substituí-lo pelo o seguinte:<!-- <jta-data-source>java:/bookingDatasource</jta-data-source> --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
<!-- <jta-data-source>java:/bookingDatasource</jta-data-source> --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Reimplante o aplicativo deletando o arquivoEAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failede criando um arquivo em brancojboss-seam-booking.ear.dodeployno mesmo diretório. - A esta altura, o aplicativo é implantado sem erros, porém quando acessar o URL http://localhost:8080/seam-booking/ em um navegador e tentar "Entrar na Conta", um erro de tempo de execução “A página não está sendo redirecionada de forma apropriada” será exibido. No próximo passo, você aprenderá como depurar e resolver os erros de tempo de execução.Consulte Seção 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” para mais informações sobre como depurar e resolver problemas de tempo de execução.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.