Webアプリケーションの配備解除をしたところ JAR ファイルがロックされて残ったので、WebOTX のサービスを停止して JAR ファイルを削除した後、OTX-FAQ-000689 を参考に antiJARLocking を設定しました。
しかし、antiJARLocking を設定しても、再度 JAR ファイルがロックされました。
原因と回避方法を教えてください。
antiJARLocking は ClassLoader の getResources メソッドに対しては有効になりません。
そのため、アプリケーションやライブラリで ClassLoader の getResources メソッドで取得した URL から openStream メソッドで InputStream をオープンしている場合は、その InputStream をクローズしても JAR ファイルがクローズされずにロックされます。
Apache Log4j 2 を使用している場合や、JAR ファイル内に META-INF/services/javax.servlet.ServletContainerInitializer が存在する場合に、この現象が発生することを確認しています。
回避するには、当該 JAR ファイルを WAR ファイルから抜き出して、WAR ファイル外の任意のディレクトリに移動し、nec-web.xml の class-loader 要素の extra-class-path で JAR ファイルのパスを指定してください。
[extra-class-path の設定方法]
<nec-web-app>
<class-loader extra-class-path="JAR ファイルのパス名"/>
</nec-web-app>
※ 移動したJARファイルは、アプリケーション配備後はドメインを停止するまで削除できません。
【対象製品】Application Server
【確認済みのバージョン】V8以降
【確認済みのエディション】すべて
【確認済みの対象OS】Windows
【確認済みのJavaバージョン】すべて
【コンポーネント】Webコンテナ
【カテゴリー】トラブルシューティング