4.3.6. Depuração e resolução do erros e exceções do Seam 2.2 Booking Archive Deployment


Na etapa anterior, Seção 4.3.5, “Construção e Depuração da Versão do JBoss EAP 5.1 do Aplicativo Seam 2.2 Booking”, você construiu o aplicativo Seam 2.2 Booking do JBoss EAP 5.1 e o implantava na pasta de implantação do JBoss EAP 6. Nessa etapa, você depura e resolve cada erro de implantação que você encontrou.

Importante

Os aplicativos que usam o Hibernate diretamente com o Seam 2.2 podem usar a versão do Hibernate 3 empacotados dentro do aplicativo. O Hibernate 4, que é fornecido através do módulo org.hibernate do JBoss EAP 6, não é suportado pelo Seam 2.2. Esta amostra possui por intenção ajudá-lo executar o seu aplicativo no JBoss EAP 6 como primeira etapa. Por favor certifique-se de que o empacotamento do Hibernate 3 com o aplicativo Seam 2.2 não é uma configuração suportada.

Procedimento 4.16. Depuração e resolução dos erros de implantação e exceções

  1. Problema - java.lang.ClassNotFoundException: javax.faces.FacesException
    Quando você implanta o aplicativo, 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:

    O ClassNotFoundException indica que falta uma dependência. Neste caso, ele não pode encontrar a classe javax.faces.FacesException e você precisa adicionar a dependência.

    Como resolver isto:

    Busque pelo nome do módulo para aquela classe no diretório EAP6_HOME/modules/system/layers/base/ apenas observando o caminho que coincide com a classe faltante. Neste caso, você pode encontrar dois módulos que coincidem com o caminho:

    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 um deles no diretório principal é para JSF 2.0 e outro localizado no diretório 1.2 é para JSF 1.2. Caso houvesse apenas um módulo disponível, você poderia criar simplesmente um arquivo MANIFEST.MF e adicionar a dependência do módulo. Neste caso, você deseja usar a versão JSF 1.2 ao invés da versão 2.0 no principal, de forma que você precisa especificar uma e excluir a outra. Para isto, crie um arquivo jboss-deployment-structure.xml no diretório do META-INF/ do EAR que contém 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ção deployment, você adiciona a dependência para o javax.faces.api do módulo JSF 1.2. Você pode adicionar também a dependência do módulo JSF 1.2 na seção de subimplantação para o WAR e excluir o módulo para o JSF 2.0.

    Reimplante o aplicativo apenas deletando o arquivo EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed e criando um arquivo jboss-seam-booking.ear.dodeploy vazio no mesmo diretório.
  2. Problema - java.lang.ClassNotFoundException: org.apache.commons.logging.Log
    Quando você implanta o aplicativo, 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:

    O ClassNotFoundException indica a falta de uma dependência. Neste caso, ele não pode buscar a classe org.apache.commons.logging.Log e você precisa adicionar a dependência.

    Como resolver isto:

    Busque pelo nome do módulo para aquela classe no diretório EAP6_HOME/modules/system/layers/base/ apenas observando o caminho que coincide com a classe faltante. Neste caso, você pode encontrar um módulo que coincide o caminho org/apache/commons/logging/. O nome do módulo é “org.apache.commons.logging”.

    Modifique o arquivo jboss-deployment-structure.xml e adicione a dependência do módulo à seção de implantação do arquivo.
    <module name="org.apache.commons.logging" export="true"/>
    
    
    O jboss-deployment-structure.xml deve 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 apenas deletando o arquivo EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed e criando um arquivo jboss-seam-booking.ear.dodeploy vazio no mesmo diretório.
  3. Problema - java.lang.ClassNotFoundException: org.dom4j.DocumentException
    Quando você implanta o aplicativo, 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:

    O ClassNotFoundException indica que falta uma dependência. Neste caso, ele não pode buscar pela classe org.dom4j.DocumentException.

    Como resolver isto:

    Encontre o nome do módulo no diretório EAP6_HOME/modules/system/layers/base/ procurando pelo org/dom4j/DocumentException. O nome do módulo é “org.dom4j”. Modifique o arquivo jboss-deployment-structure.xml para adicionar a dependência do módulo à seção de implantação do arquivo.

    <module name="org.dom4j" export="true"/>
    
    
    O arquivo jboss-deployment-structure.xml deve agora parecer-se com o abaixo:
    <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 apenas deletando o arquivo EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed e criando um arquivo jboss-seam-booking.ear.dodeploy vazio no mesmo diretório.
  4. Problema - java.lang.ClassNotFoundException: org.hibernate.validator.InvalidValue
    Quando você implanta o aplicativo, 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:

    O ClassNotFoundException indica que falta uma dependência. Neste caso, isto não pode encontrar a classe org.hibernate.validator.InvalidValue.

    Como resolver isto:

    Existe um módulo “org.hibernate.validator”, mas o JAR não contém 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.1. Procure pelo JAR que contém a classe ausente no diretório EAP5_HOME/seam/lib/. Digite o seguinte para abrí-lo:

    $ cd EAP5_HOME/seam/lib
    $ grep 'org.hibernate.validator.InvalidValue' `find . -name '*.jar'`
    
    O resultado apresenta:
    $ Binary file ./hibernate-validator.jar matches
    $ Binary file ./test/hibernate-all.jar matches
    
    Neste caso, copie o hibernate-validator.jar para o diretório jboss-seam-booking.ear/lib/
    $ cp EAP5_HOME/seam/lib/hibernate-validator.jar jboss-seam-booking.ear/lib
    

    Reimplante o aplicativo apenas deletando o arquivo EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed e criando um arquivo jboss-seam-booking.ear.dodeploy vazio no mesmo diretório.
  5. Problema - java.lang.InstantiationException: org.jboss.seam.jsf.SeamApplicationFactory
    Quando você implanta o aplicativo, 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:

    O com.sun.faces.config.ConfigurationException e java.lang.InstantiationException indicam um problema de dependência. Neste caso, a causa não é óbvia.

    Como resolver isto:

    Você precisa encontrar o módulo que contém as classes com.sun.faces. Enquanto não há módulo com.sun.faces, existem dois módulos com.sun.jsf-impl. Uma checagem rápida do jsf-impl-1.2_13.jar no diretório 1.2 demonstra que isto contém as classes com.sun.faces. Assim como realizado com o javax.faces.FacesExceptionClassNotFoundException, você deseja usar a versão JSF 1.2 ao invés da versão JSF 2.0 no principal, de forma que você pode especificar um e excluir o outro. Você precisa modificar o jboss-deployment-structure.xml para adicionar a dependência do módulo à seção da implantação do arquivo. Você precisa também adicioná-lo à subimplantação WAR e excluir o módulo JSF 2.0. O arquivo deve 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="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 apenas deletando o arquivo EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed e criando um arquivo jboss-seam-booking.ear.dodeploy vazio no mesmo diretório.
  6. Problema - java.lang.ClassNotFoundException: org.apache.commons.collections.ArrayStack
    Quando você implanta o aplicativo, 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:

    O ClassNotFoundException indica que falta uma dependência. Neste caso, ele não pode buscar a classe org.apache.commons.collections.ArrayStack.

    Como resolver isto:

    Encontre o nome do módulo no diretório EAP6_HOME/modules/system/layers/base/ procurando pelo caminho org/apache/commons/collections. O nome do módulo é “org.apache.commons.collections”. Modifique o jboss-deployment-structure.xml para adicionar a dependência do módulo à seção de implantação do arquivo.

    <module name="org.apache.commons.collections" export="true"/>
    
    O arquivo jboss-deployment-structure.xml deve agora parecer-se com o abaixo:
    <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 apenas deletando o arquivo EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed e criando um arquivo jboss-seam-booking.ear.dodeploy vazio no mesmo diretório.
  7. Problema - Serviços com dependências indisponíveis/faltantes
    Quando você implanta o aplicativo, 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 você obter um erro “Services with missing/unavailable dependencies”, observe o texto entre parênteses após "falta". Neste caso você verá:

    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 Gerenciador de Entidade e problema de fonte de dados.

    Como resolver isto:

    No JBoss EAP 6, a configuração de fonte de dados foi alterada e precisa ser definida no arquivo EAP6_HOME/standalone/configuration/standalone.xml. Uma vez que o JBoss EAP 6 lança uma fonte de dados de amostra que já está definida no arquivo standalone.xml, modifique o arquivo persistence.xml para uso da amostra da fonte de dados neste aplicativo. Quando pesquisando no arquivo standalone.xml, você pode perceber que o jndi-name para amostra da fonte de dados é java:jboss/datasources/ExampleDS. Modifique o arquivo jboss-seam-booking.jar/META-INF/persistence.xml para comentar o elemento jta-data-source existente 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 apenas deletando o arquivo EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed e criando um arquivo jboss-seam-booking.ear.dodeploy vazio no mesmo diretório.
  8. Nessas alturas, o aplicativo implanta sem nenhum erro, mas quando você acessa o URL http://localhost:8080/seam-booking/ num navegador e tenta "Entrar na Conta", você obterá um erro do período de execução "A página não está redirecionando a propriedade". Na próxima etapa você aprenderá como depurar e solucionar os erros do período de execução.
    Consulte a Seção 4.3.7, “Depuração e Resolução de erros e exceções do Seam 2.2 Booking Archive Runtime” para maiores informações sobre como depurar e resolver problemas do período de execução.
Red Hat logoGithubredditYoutubeTwitter

Aprender

Experimente, compre e venda

Comunidades

Sobre a documentação da Red Hat

Ajudamos os usuários da Red Hat a inovar e atingir seus objetivos com nossos produtos e serviços com conteúdo em que podem confiar. Explore nossas atualizações recentes.

Tornando o open source mais inclusivo

A Red Hat está comprometida em substituir a linguagem problemática em nosso código, documentação e propriedades da web. Para mais detalhes veja o Blog da Red Hat.

Sobre a Red Hat

Fornecemos soluções robustas que facilitam o trabalho das empresas em plataformas e ambientes, desde o data center principal até a borda da rede.

Theme

© 2026 Red Hat
Voltar ao topo