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:
ERROR \[org.jboss.msc.service.fail\] (MSC service thread 1-1) MSC00001: Failed to start service jboss.deployment.subunit."jboss-seam-booking.ear"."jboss-seam-booking.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."jboss-seam-booking.ear"."jboss-seam-booking.war".POST_MODULE: Failed to process phase POST_MODULE of subdeployment "jboss-seam-booking.war" of deployment "jboss-seam-booking.ear" (.. additional logs removed ...) Caused by: java.lang.ClassNotFoundException: javax.faces.FacesException from \[Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader\] at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191)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:javax/faces/api/main javax/faces/api/1.2
Ambos os módulos possuem o mesmo nome de módulo: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:<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>Na seçãodeployment, 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:
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-8) MSC00001: Failed to start service jboss.deployment.unit."jboss-seam-booking.ear".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."jboss-seam-booking.ear".INSTALL: Failed to process phase INSTALL of deployment "jboss-seam-booking.ear" (.. additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.Log from [Module "deployment.jboss-seam-booking.ear.jboss-seam-booking.war:main" from Service Module Loader]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"/>
jboss-deployment-structure.xmldeve parecer-se com o seguinte:<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> <module name="org.apache.commons.logging" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>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]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.<module name="org.dom4j" export="true"/>
O arquivojboss-deployment-structure.xmldeve parecer-se com o seguinte agora:<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> <module name="org.apache.commons.logging" export="true"/> <module name="org.dom4j" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>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]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:$ cd EAP5_HOME/seam/lib $ grep 'org.hibernate.validator.InvalidValue' `find . -name '*.jar'`
O resultado apresenta o seguinte:$ Binary file ./hibernate-validator.jar matches $ Binary file ./test/hibernate-all.jar matches
Neste caso, copiehibernate-validator.jarpara o diretóriojboss-seam-booking.ear/lib/$ cp EAP5_HOME/seam/lib/hibernate-validator.jar jboss-seam-booking.ear/lib
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:
INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-7) Unsanitized stacktrace from failed start...: com.sun.faces.config.ConfigurationException: Factory 'javax.faces.application.ApplicationFactory' was not configured properly. at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:296) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4] (... additional logs removed ...) Caused by: javax.faces.FacesException: org.jboss.seam.jsf.SeamApplicationFactory at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:606) [jsf-api-1.2_13.jar:1.2_13-b01-FCS] (... additional logs removed ...) at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:294) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4] ... 11 more Caused by: java.lang.InstantiationException: org.jboss.seam.jsf.SeamApplicationFactory at java.lang.Class.newInstance0(Class.java:340) [:1.6.0_25] at java.lang.Class.newInstance(Class.java:308) [:1.6.0_25] at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:604) [jsf-api-1.2_13.jar:1.2_13-b01-FCS] ... 16 more
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:<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> <module name="com.sun.jsf-impl" slot="1.2" export="true"/> <module name="org.apache.commons.logging" export="true"/> <module name="org.dom4j" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> <module name="com.sun.jsf-impl" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> <module name="com.sun.jsf-impl" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>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]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.<module name="org.apache.commons.collections" export="true"/>
O arquivojboss-deployment-structure.xmldeve parecer-se com o seguinte agora:<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <dependencies> <module name="javax.faces.api" slot="1.2" export="true"/> <module name="com.sun.jsf-impl" slot="1.2" export="true"/> <module name="org.apache.commons.logging" export="true"/> <module name="org.dom4j" export="true"/> <module name="org.apache.commons.collections" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> <module name="com.sun.jsf-impl" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> <module name="com.sun.jsf-impl" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>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 ]"]}}}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:
missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.AuthenticatorAction/em\" ]
O “/em” indica um problema de fonte de dados e Gerenciador de Entidade.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>
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.

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.