ClassNotFound/NoClassDefFoundErrorへの対応 |
JVMがクラスをロードしようとしたが見つからなかった場合に発生します。
APログにjava.lang.ClassNotFoundExceptionもしくはjava.lang.NoClassDefFoundErrorのスタックトレースが出力されます。
イベントログ(アプリケーション、システム)・シスログ
APログ: ${INSTANCE_ROOT}/logs/tpsystem/<アプリケーショングループ名>/<プロセスグループ名>/save/<プロセスグループ名>.<数字>.<PID>.log
システムトレース: ${INSTANCE_ROOT}/logs/tpsystem/<アプリケーショングループ名>/<プロセスグループ名>/save/<プロセスグループ名>_sys.<数字>.<PID>.log
${INSTANCE_ROOT}/config/tpsystem/history.act (sav)
${INSTANCE_ROOT}/config/tpsystem/sysmsg.trc (sav)
${INSTANCE_ROOT}/logs/server.log
${INSTANCE_ROOT}/logs/webotx_agent.log
${INSTANCE_ROOT}/logs/tpsystem/webotx_tpmmgr.log
本エラーの性質上、単に再起動を行っても同様の障害になる可能性が非常に高く、次に説明する対策を行う必要があるでしょう。
該当のクラスがjarファイルに含まれているかの確認
JVMが出力するスタックトレースに、ロードしようとした該当クラスの名前が出力されます。jarコマンドを使用して、そのクラスが含まれるべきjarファイルに含まれているかどうかを確認してください。
該当クラスを含むjarファイルが配備されているかどうかを確認してください。
共有コンポーネントを使用するためには、各サーバコンポーネントの設定で「使用する共有コンポーネント」を選択する必要があります。選択されていない共有コンポーネントは読み込まれません。各サーバコンポーネントで、使用すべき共有コンポーネントが選択されているかを確認してください。
該当クラスがサーバコンポーネントでも共有コンポーネントでもないjarファイルに含まれる場合、そのjarファイルへのパスがCLASSPATHに間違いなく設定されているかどうかを確認してください。APログと同じディレクトリに生成されるファイル、<プロセスグループ名>_sys.<プロセスID>.logの「CLASSPATH=」で始まる行に環境変数CLASSPATHの値が出力されますので、その値で確認できます。
上記の確認でも改善しない場合、クラスの参照関係に問題がある可能性があります。 WebOTXでは独自のクラスローダの関係上、クラスの参照関係には制限があります。 詳細は 「注意制限事項」 →「13 TPモニタ」 →「 13.11. Javaのクラスロードについて」 を参照してください。制限に該当する場合、APの再設計、jarの再構成が必要になる場合があります。