DATE : 2007/06/14 (Thu)
理不尽な不具合が発生した場合は、一度、コンパイル済み JSP ファイルを消してみるのもいいかもしれません。
稼動しているウェブアプリケーションのバージョンを上げようと、サーバを止めて新しいバージョンのファイル類を配備したところ、トップページで特定のクラスが見つからないという例外が発生してしまいました。
このクラスは、ある JSR 仕様を実装したライブラリに含まれていたもので、新バージョンでは別のベンダーが実装したものに置き換えていました。これだけであれば、あからさまに理不尽なのでコンパイル済み JSP ファイルを消去していたのですが、不具合の原因を究明するのを難しくしていた要因がもう一つありました。旧バージョンで使用していたライブラリに依存するライブラリを新バージョンでも使用していたのです。元々、旧バージョンで使用していたのは、JSR 仕様を実装したライブラリとそれを拡張するためのライブラリとして組でよく紹介されるライブラリでした。ところが、JSR 仕様を実装した方の品質があまり良くないので、それだけ別ベンダーのものに取り替えたのです。
ともに JSR 仕様を実装したライブラリなので、両者のインタフェースは同じです。そのため、開発機上では普通に動作していました。ところが、公開用サーバに移動したところでエラーが発生したので戸惑ってしまったわけです(また、開発機上と公開用サーバではサーブレットコンテナも違っていました)。
実際には、初めに書いたように、コンパイル済み JSP ファイルを消去しただけで正しく動作してくれるようになりました。公開用サーバのサーブレットコンテナは、JSP ファイルに変化があると自動的に再コンパイルするような設定になっていたのですが、どうもうまく変化を検知してくれなかったようです。
というわけで、理不尽な不具合が発生した場合、JSP ファイルが再コンパイルされなかったという状況も考えたほうがよさそうです。
(;^ω^)コンパイル済み JSP ファイルを消去しても不具合が直らなかった場合は、地獄の始まりのようなものですが……。