context.xmlの配置について分かったこと

Tomcatにて,データベースにアクセスするためのデータソースの定義等を行うファイル、それがcontext.xmlです。
contextとはつまりアプリケーションのことなので、context.xmlはアプリケーションの設定ファイルといった,感じでしょうか。

contextに関するページは以下を参照。
Apache Tomcat Configuration Reference (6.0.53) - The Context Container
http://www.oki.com/jp/oss/document/tomcat/tomcat-6.0.14/build/tomcat-docs/config/printer/context.html
(日本語)
それで、このcontext.xmlの配置場所は5種類存在します。

1.%CATALINA_HOME/conf/server.xml

server.xmlはサーバーの設定を行うためのファイル。つまり、このファイルに書いた設定は全てのアプリケーションに適用されることになります。
※ただしコンテキストの定義はserver.xmlに記述しないことが推奨されています。

2.%CATALINA_HOME/conf/context.xml

server.xml同様全てのアプリケーションに適用されます。

3.%CATALINA_HOME/conf/[エンジン名]/[ホスト名]/contet.xml

これはパス上のホスト内のすべてのアプリケーションに対して設定が適用されます。

4.%CATALINA_HOME/conf/[エンジン名]/[ホスト名]/[アプリケーション名].xml

パッと見て分かるとおり、[アプリケーション名]が示すアプリケーションのみが適用の対象になります。

5.%CATALINA_HOME/webapps/[アプリケーション名]/META-INF/context.xml

今までのフォルダ階層下ではなく、アプリケーションのルートにMETA-INFフォルダを作成し、その下にcontext.xmlを配置します。
アプリケーションフォルダ内にあるので当然、当該アプリケーションのみに適用されます。


さらに4と5の関係について調べてみました。
リンク先によれば

Only if a context file does not exist for the application in the $CATALINA_BASE/conf/[enginename]
/[hostname]/, in an individual file at /META-INF/context.xml inside the application files. If the web
application is packaged as a WAR then /META-INF/context.xml will be copied to $CATALINA_BASE/conf
/[enginename]/[hostname]/ and renamed to match the application's context path. Once this file exists,
it will not be replaced if a new WAR with a newer /META-INF/context.xml is placed in the host's appBase.

とのこと。
起動時に5にしか該当xmlファイルがなければそれを設定ファイルとして読み込みます。
その内容をそっくり4にコピーするようです。

そして次回以降は4の設定ファイルを利用するといった感じです。
実際にやってみると確認できました。

使用バージョン

tomcat6.0.29


他の配置場所の優先順位や関係性に関してはまだわかりませんが...でもアプリケーション全体に適用なんて使う機会もなさそうだしね←

はじめてのJSP&サーブレット Eclipse 3.7 Indigo+Tomcat 7対応版 (TECHNICAL MASTER 67)

はじめてのJSP&サーブレット Eclipse 3.7 Indigo+Tomcat 7対応版 (TECHNICAL MASTER 67)

Tomcatハンドブック 第2版

Tomcatハンドブック 第2版