検索

4.3.6. アーカイブデプロイメントエラーと例外のデバッグおよび解決

download PDF
前述の手順で、「JBoss EAP 5.X バージョンの Seam 2.2 Booking アプリケーションのビルドとデプロイ」 は JBoss EAP 5.X Seam 2.2 Booking アプリケーションをビルドし、JBoss EAP 6 デプロイメントフォルダーにデプロイします。このステップでは、発生した各デプロイメントエラーをデバッグし、解決します。
重要
Hibernate を Seam 2.2 で直接使用するアプリケーションは、アプリケーション内にパッケージ化された Hibernate 3 のバージョンを使用する場合があります。JBoss EAP 6 の org.hibernate モジュールで提供される Hibernate 4 は Seam 2.2 ではサポートされません。この例は、最初の手順としてアプリケーションを JBoss EAP 6 で実行できるようにするのに役立つことを目的としています。Seam 2.2 アプリケーションと共に Hibernate 3 をパッケージ化するオプションはサポートされないことに注意してください。

手順4.10 デプロイメントエラーと例外のデバッグおよび解決

  1. Issue - java.lang.ClassNotFoundException: javax.faces.FacesException
    アプリケーションをデプロイする場合、ログには以下のエラーが含まれます。
    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)
    

    意味:

    ClassNotFoundException は依存関係がないことを示します。この場合、javax.faces.FacesException クラスが見つからないため、依存関係を明示的に追加する必要があります。

    解決方法:

    足りないクラスに一致するパスを検索して 、EAP6_HOME/modules/system/layers/base/ ディレクトリーでそのクラスのモジュール名を見つけます。この場合、以下に一致する 2 つのモジュールがあります。

    javax/faces/api/main
    javax/faces/api/1.2
    
    両方のモジュールは同じモジュール名 javax.faces.api を持ちますが、メインディレクトリーの 1 つが JSF 2.0 用で、1.2 ディレクトリーにあるものは JSF 1.2 用です。利用可能なモジュールが 1 つしかない場合は、MANIFEST.MF ファイルを作成し、モジュール依存関係を追加するだけです。ただし、この場合は、main で 2.0 バージョンではなく JSF 1.2 バージョンを使用したい場合は、1 つを指定してもう 1 つのバージョンを除外する必要があります。これには、以下のデータが含まれる EAR の META-INF/ ディレクトリーに jboss-deployment-structure.xml ファイルを作成します。
    <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>
    
    deployment セクションで、JSF 1.2 モジュールの javax.faces.api の依存関係を追加します。また、WAR のサブデプロイメントセクションに JSF 1.2 モジュールの依存関係を追加し、JSF 2.0 のモジュールを除外します。

    EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed ファイルを削除し、空の jboss-seam-booking. ear.dodeploy ファイルを同じディレクトリーに作成してアプリケーションを再デプロイします。
  2. Issue - java.lang.ClassNotFoundException: org.apache.commons.logging.Log
    アプリケーションをデプロイする場合、ログには以下のエラーが含まれます。
    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]
    

    意味:

    ClassNotFoundException は依存関係がないことを示します。この場合、org.apache.commons.logging.Log クラスが見つからないため、依存関係を明示的に追加する必要があります。

    解決方法:

    足りないクラスに一致するパスを検索して 、EAP6_HOME/modules/system/layers/base/ ディレクトリーでそのクラスのモジュール名を見つけます。この場合、org/apache/commons/logging/ パスに一致する 1 つのモジュールがあります。モジュール名は "org.apache.commons.logging" です。

    jboss-deployment-structure.xml ファイルを変更して、モジュール依存関係をファイルの deployment セクションに追加します。
    <module name="org.apache.commons.logging" export="true"/>
    
    jboss-deployment-structure.xml は以下のようになります。
    <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>
    
    EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed ファイルを削除し、空の jboss-seam-booking. ear.dodeploy ファイルを同じディレクトリーに作成してアプリケーションを再デプロイします。
  3. issue - java.lang.ClassNotFoundException: org.dom4j.DocumentException
    アプリケーションをデプロイする場合、ログには以下のエラーが含まれます。
    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]
    

    意味:

    ClassNotFoundException は依存関係がないことを示します。この場合、org.dom4j.DocumentException クラスが見つかりません。

    解決方法:

    org/dom4j/DocumentException を参照して、EAP6_HOME/modules/system/layers/base/ディレクトリーでモジュール名を見つけます。モジュール名は "org.dom4j" です。jboss-deployment-structure.xml ファイルを変更して、モジュール依存関係をファイルの deployment セクションに追加します。

    <module name="org.dom4j" export="true"/>
    
    jboss-deployment-structure.xml ファイルは以下のようになります。
    <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>
    

    EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed ファイルを削除し、空の jboss-seam-booking. ear.dodeploy ファイルを同じディレクトリーに作成してアプリケーションを再デプロイします。
  4. Issue - java.lang.ClassNotFoundException: org.hibernate.validator.InvalidValue
    アプリケーションをデプロイする場合、ログには以下のエラーが含まれます。
    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]
    

    意味:

    ClassNotFoundException は依存関係がないことを示します。この場合、org.hibernate.validator.InvalidValue クラスが見つかりません。

    解決方法:

    モジュール "org.hibernate.validator" がありますが、JAR には org.hibernate.validator.InvalidValue クラスが含まれないため、モジュール依存関係を追加してもこの問題は解決されません。この場合、クラスが含まれる JAR は JBoss EAP 5.X デプロイメントの一部でした。EAP5_HOME/seam/lib/ ディレクトリーに不足しているクラスが含まれる JAR を検索します。これを実行するには、コンソールを開き、以下のコマンドを入力します。

    $ cd EAP5_HOME/seam/lib
    $ grep 'org.hibernate.validator.InvalidValue' `find . -name '*.jar'`
    
    結果は以下のようになります。
    $ Binary file ./hibernate-validator.jar matches
    $ Binary file ./test/hibernate-all.jar matches
    
    この場合は、hibernate-validator.jarjboss-seam-booking.ear/lib/ ディレクトリーにコピーします。
    $ cp EAP5_HOME/seam/lib/hibernate-validator.jar jboss-seam-booking.ear/lib
    

    EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed ファイルを削除し、空の jboss-seam-booking. ear.dodeploy ファイルを同じディレクトリーに作成してアプリケーションを再デプロイします。
  5. 問題 - java.lang.InstantiationException: org.jboss.seam.jsf.でApplicationFactory
    アプリケーションをデプロイする場合、ログには以下のエラーが含まれます。
    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
    

    意味:

    com.sun.faces.config.ConfigurationException および java.lang.InstantiationException は、依存関係の問題を示します。この場合、原因は明確ではありません。

    解決方法:

    com.sun.faces クラスが含まれるモジュールを見つける必要があります。com.sun.faces モジュールがありませんが、com.sun.jsf-impl モジュールが 2 つあります。1.2 ディレクトリーの jsf-impl-1.2_13.jar を簡単にチェックすると、com.sun.faces クラスが含まれていることが分かります。javax.faces.FacesException ClassNotFoundException では、メインの JSF 2.0 バージョンではなく JSF 1.2 バージョンを使用する必要があるため、1 つを指定して別のバージョンを除外する必要があります。jboss-deployment-structure.xml を変更して、モジュールの依存関係をファイルの deployment セクションに追加します。また、WAR サブデプロイメントに追加し、JSF 2.0 モジュールを除外する必要があります。ファイルは以下のようになります。

    <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>

    EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed ファイルを削除し、空の jboss-seam-booking. ear.dodeploy ファイルを同じディレクトリーに作成してアプリケーションを再デプロイします。
  6. Issue - java.lang.ClassNotFoundException: org.apache.commons.collections.ArrayStack
    アプリケーションをデプロイする場合、ログには以下のエラーが含まれます。
    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]
    

    意味:

    ClassNotFoundException は依存関係がないことを示します。この場合、org.apache.commons.collections.ArrayStack クラスが見つかりません。

    解決方法:

    org/apache/commons /collections パスを確認して、EAP6_HOME/modules/system/layers/base / ディレクトリーでモジュール名を見つけます。モジュール名は "org.apache.commons.collections" です。jboss-deployment-structure.xml を変更し、モジュール依存関係をファイルの deployment セクションに追加します。

    <module name="org.apache.commons.collections" export="true"/>
    jboss-deployment-structure.xml ファイルは以下のようになります。
    <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>

    EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed ファイルを削除し、空の jboss-seam-booking. ear.dodeploy ファイルを同じディレクトリーに作成してアプリケーションを再デプロイします。
  7. 問題: 利用できない依存関係/利用できない依存関係のあるサービス
    アプリケーションをデプロイする場合、ログには以下のエラーが含まれます。
    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 ]"]}}}
    

    意味:

    "Services with missing/unavailable dependencies" エラーが出たら、「missing」後の括弧内のテキストを確認してください。この場合は、以下を確認できます。

    missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.AuthenticatorAction/em\" ]
    
    "/em" はエンティティーマネージャーおよびデータソースの問題を示します。

    解決方法:

    JBoss EAP 6 ではデータソース設定が変更になり、EAP6_HOME/standalone/configuration/standalone.xml ファイルで定義する必要があります。JBoss EAP 6 には standalone.xml ファイルにすでに定義されているデータベースのサンプルが含まれるため、persistence.xml ファイルを変更して、このアプリケーションでこのサンプルデータベースを使用します。standalone.xml ファイルを見ると、サンプルデータベースの jndi-namejava:jboss/datasources/ExampleDS であることを確認できます。jboss-seam-booking.jar/META-INF/persistence.xml ファイルを変更して、既存の jta-data-source 要素をコメント化し、以下のように置き換えます。

    <!-- <jta-data-source>java:/bookingDatasource</jta-data-source> -->
    <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>

    EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed ファイルを削除し、空の jboss-seam-booking. ear.dodeploy ファイルを同じディレクトリーに作成してアプリケーションを再デプロイします。
  8. この時点で、アプリケーションはエラーなしでデプロイされますが、ブラウザーで URL http://localhost:8080/seam-booking/ にアクセスし、「Account Login」を試みると、「The page doesn't redirecting properly」というランタイムエラーが表示されます。次の手順では、ランタイムエラーをデバッグし、解決する方法を説明します。
    ランタイムの問題をデバッグおよび解決する方法については、こちらをクリックします。 「アーカイブランタイムエラーと例外をデバッグおよび解決」
    前のトピックに戻るには、ここをクリックしてください。 「Seam 2.2 Booking アーカイブを JBoss EAP 6 に移行します: Step-By-Step Instructions」
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.