今までTomcatの5.5.23で開発していたのですが、Tomcatの5.5.25にバージョンアップしたら動かない・・・。お客さんにリビジョン違いで動作しないのは、アプリのバグです。と言い切ってしまったので調査しました。
今までずっと放置されていた、<jsp:include>でファイルが存在しない場合に何もしないバグ?に対処したらしいです。リリースノートはキチンと読まないとダメですね。今までファイルが存在しない場合に何も行われない事に期待したコードだったので、これは致命的でした。
Tomcatは常にコードもセットで落とすようにしているので該当箇所(org.apache.jasper.servlet.JspServlet)を見ると、やはりエラーの処理が追加されていました。%CATALINA_HOME%common/classesに5.5.23のクラスを入れると問題なく動くのですが、そもそもJSPの仕様として正しいのかを調査すると、ファイルが存在しない場合の挙動が明記されていないっぽいのです。・・・コンテナ依存かよ・・・。
結局は、ひとまず5.5.23のクラスを抜き出してパッチとして5.5.25に入れる事に。そして暇を見て空っぽのインクルード対象のファイルを作成することで落ち着きそうです。
いやぁ・・・たまにこういう罠があるのですね。重要なのは、
- オープンソースならAPサーバ、フレームワーク等のコードくらいは読む
- リリースノートを読む
- 公式の仕様書を読む
「何かよくわかんないけど、うまく動かないっす・・・やっぱオープンソースはダメっすね。」とか安易に言っちゃいけません。