ClassNotFound/NoClassDefFoundErrorへの対応

事象説明

    JVMがクラスをロードしようとしたが見つからなかった場合に発生します。

状況の確認方法

    APログにjava.lang.ClassNotFoundExceptionもしくはjava.lang.NoClassDefFoundErrorのスタックトレースが出力されます。

採取資料
復旧方法

    本エラーの性質上、単に再起動を行っても同様の障害になる可能性が非常に高く、次に説明する対策を行う必要があります。

予防のための対策

    該当のクラスがjarファイルに含まれているかの確認

      JVMが出力するスタックトレースに、ロードしようとした該当クラスの名前が出力されます。jarコマンドを使用して、そのクラスが含まれるべきjarファイルに含まれているかどうかを確認してください。

    必要なjarファイルが配備されているかの確認

      該当クラスを含むjarファイルが配備されているかどうかを確認してください。

    使用する共有コンポーネントの確認

      共有コンポーネントを使用するためには、各サーバコンポーネントの設定で「使用する共有コンポーネント」を選択する必要があります。選択されていない共有コンポーネントは読み込まれません。各サーバコンポーネントで、使用すべき共有コンポーネントが選択されているかを確認してください。

    環境変数CLASSPATHの確認

      該当クラスがサーバコンポーネントでも共有コンポーネントでもないjarファイルに含まれる場合、そのjarファイルへのパスがCLASSPATHに間違いなく設定されているかどうかを確認してください。APログと同じディレクトリに生成されるファイル、<プロセスグループ名>_sys.<プロセスID>.logの「CLASSPATH=」で始まる行に環境変数CLASSPATHの値が出力されますので、その値で確認できます。

    クラスの参照関係の確認

      上記の確認でも改善しない場合、クラスの参照関係に問題がある可能性があります。WebOTXでは独自のクラスローダの関係上、クラスの参照関係には制限があります。詳細は、 [ 注意制限事項 > 13. TPモニタ > 13.1. 注意事項 > 13.1.3. Javaのクラスロードについて ] を参照してください。制限に該当する場合、APの再設計、jarの再構成が必要になる場合があります。


関連情報