丁度今日、衣替えをした。
要らない服をいっぱい捨てて、引き出しの整理をしたら随分すっきりした。
入れる先があれば片付けもする気になるというものだ。
折角洗濯物をたたんでも引き出しに入りきらないと畳んだまま出しっぱなしになって、そのうち崩れて散らかるだけだからね。
@
久しぶりに暑く感じる日だった:
ところで今日はちょっと暑かった。
夜までずっと汗ばむ感じだった。
ここのところ大分涼しくなってきて半そではつらい日もあるのにな。
Widnows で Tomcat でサーブレット開発をしていて、war ファイルの undeploy/deploy を行う際に
アプリケーションのweb.xmlが見つかりません、デフォルトだけを使用します。
というエラーメッセージが表示されて、正常に動作しなくなってしまうことがある。
これは webapp/hoge.war の undeploy 時に、webapp/hoge ディレクトリ以下のファイルの削除に失敗して undeploy が完全に行われないまま、新しい war を deploy してしまうことが原因です。
Tomcat がファイルを掴んだままでロック状態のままファイルを削除しようとする為のようです。
このロックの問題は Windows 環境でのみ発生して Linux 等では発生しません。
Tomcat 起動中に webapp/hoge/ 以下のファイルを削除できないことが原因なので、Tomcat を停止してから webapp/hoge を削除して、hoge.war を deploy し直せば、上記エラーメッセージは出なくなります。
でも、war を更新するたびにそんな面倒なことするのはありえなーい。
というわけで根本的解決策は、Tomcat の設定ファイル conf/server.xml 中の unpackWARs="true" というのを探してこれを false に変更する。
そうすることにより、hoge.war が勝手に hoge ディレクトリに解凍されることがなくなり、削除の際の変なトラブルも起きなくなる。
Windows で Tomcat を動かす場合はこの設定を絶対やっとくべきだ。
気をつけよう。
@
もう一つの解決策:
WEB-INF/context.xml を以下の内容で作成しておくと Tomcat がリソースをロックしなくなるので上記問題が発生しなくなる。
<Context antiJARLocking="true" antiResourceLocking="true"/>
この方法のメリットは deploy 先の Tomcat を変更することなく、WEB アプリケーション単体で問題が解決することです。
デメリットは、ファイルの open/close が増えるのでパフォーマンスが悪くなるかもしれないということです。