Webアプリケーションがあり、そのインスタンスは同じTomcat(v6.0.14)インスタンスの下に複数回デプロイされます。warファイルの名前が「app.war」であるとすると、「app1.war」、「app2.war」などをデプロイします。
すべてのアプリケーションインスタンス(〜20)が正しくデプロイされます。これらのアプリケーションのサーブレットにアクセスすると、Tomcatので失敗するNoClassDefFoundError
ことがあります。以下はその一例です-ClassNotFoundException
WebAppClassLoader
java.lang.NoClassDefFoundError: com/xxx/APISocketServer$ClientRequestHandler
at com.xxx.APISocketServer$APISocketServerThread.run(APISocketServer.java:143)
Caused by: java.lang.ClassNotFoundException: com.xxx.APISocketServer$ClientRequestHandler
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
... 1 more
問題のあるクラスはアプリケーションコードの一部であり、ライブラリの一部ではありません。
一部のアプリケーションインスタンスは正しく実行されるため、これはクラスパスの設定ミスの場合にはなり得ません。注意すべきことの1つは、ロードに失敗するクラスは2、3しかないということです。クラスには静的初期化ブロックがないため、クラスの初期化に失敗する可能性があります。Tomcatログ(catalina.out、localhost.log)を確認しましたが、クラス初期化エラーは見つかりませんでした。
この問題のデバッグをどのように進めればよいですか?