Tomcat設定メモ †
やりたいことは2つ
- アプリケーションのHot deploy
- conf/server.xml のHost要素のautoDeployをfalseする。
- conf/Catalina/localhost のコンテキストファイル中のContext定義でreloadableをtrueする。
- コンテキストXMLを使う場合、webapps/ にWARを置いてもdocBaseでは無視されるようなので、ここにWARを置かずに、コンテキスト名のフォルダを作りWARを展開する。アプリケーション更新時はそこにWARを上書きするようにする。
- アプリケーション再起動時にセッションを引き継ぐ
- conf/context.xml のManager要素をコメントアウトする。理由はよくわからないけどこれでアプリケーション終了時にもセッション内容が引き継がれる。
Tomcatは6を使用。war単体で使っていた時は特に問題なくwebappsのWARを差し替えるだけで更新できたけど、コンテキストファイルを用意するとちょっと動作が変わるよう。conf/server.xmlのHost要素のautoDeployをtrueすると、webapps/ にWARを置くとオートデプロイによりアプリの更新が検出され、まず以前のアプリケーションが削除され、この時コンテキストファイルまで消されてしまう。どうしてこうなった。なのでこれはfalseするかわりにコンテキストファイル中のreloadableを使うことで解決できた。
後、前々から気になっていたんだけど、アプリケーション終了時にTomcatのログに不吉なエラーが吐き出される。これはmemory leak detectionというTomcatの機能が警告しているようだけど、特に動作には問題なく、ユーザー側で対処もできない問題だそうなので安心して無視することにした。
致命的: The web application [/scone] registered the JDBC driver [org.h2.Driver] but failed to unregister
it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly
unregistered.
To prevent a memory leak, the JDBC Driver has been forcibly unregistered アプリケーションのWEB-INF/libのJAR使ってregisterしたらアプリケーションを削除した時にunregisterしようとしてもJARが読めなくなっちゃうのか。DBCPっていけてないのん?