server.xmlを使用せずにJNDIでデータベースの接続設定を一元化する
カテゴリ:Java
CentOS/Ubuntu 両対応
Tomcatでcontext.xmlを使用する
JNDI(Java Naming and Directory Interface)を使用する場合、Tomcatのserver.xmlファイルにリソース情報を記述する事も出来ますが、その場合、アプリケーションごとに設定を保持、管理できないため不便です。
そこで、META-INFディレクトリ内のcontext.xmlを使用します。
context.xmlを使用する場合、Tomcatの起動時に自動でMETA-INFディレクトリ内のcontext.xmlファイルが<コンテキスト名>.xmlにリネームされて以下のディレクトリにコピーされます。
Apache Tomcatの公式ページからダウンロードしてインストールした場合:
/opt/apache-tomcat-9.0.52/work/Catalina/localhost
aptコマンドでインストールした場合:
/etc/tomcat9/Catalina/localhost/
もし、context.xmlを変更した場合は、コピーされた該当の<コンテキスト名>.xmlファイルを一旦削除してTomcatを再起動することで反映されます。
# ls -la /opt/apache-tomcat-9.0.52/work/Catalina/localhost total 28 drwxr-x--- 7 tomcat tomcat 4096 Aug 24 02:10 . drwxr-x--- 3 tomcat tomcat 4096 Aug 24 02:10 .. drwxr-x--- 2 tomcat tomcat 4096 Aug 24 02:10 ROOT drwxr-x--- 2 tomcat tomcat 4096 Aug 24 02:10 docs drwxr-x--- 2 tomcat tomcat 4096 Aug 24 02:10 examples drwxr-x--- 2 tomcat tomcat 4096 Aug 24 02:10 host-manager drwxr-x--- 2 tomcat tomcat 4096 Aug 24 02:10 manager
context.xmlにデータベースの接続設定を記述
META-INF/context.xmlに以下のようにデータベースの接続設定を記述します。
以下はPostgreSQLに接続する場合の例です。
「name」にはリソース名「username」にはデータベースのユーザー名、「password」にはデータベースのパスワード、「url」にはデータベースのURLを指定します。
参考リソース名はweb.xmlファイルでこのリソースを参照する際に使用します。
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ROOT">
<Resource name="jdbc/hoge_db" auth="Container" type="javax.sql.DataSource" username="hoge" password="pass" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/hoge_db" />
</Context>
※urlの書式は以下となります。
jdbc:postgresql://host:port/database
web.xmlの設定
更に、アプリケーションがcontext.xmlの設定を使用できるように、WEB-INF/web.xmlファイルの「resource-ref」ディレクティブに、上記で作成したリソースを指定します。
参考「res-ref-name」にはcontext.xmlで「name」に設定したリソース名を指定します。
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/hoge_db</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
JSPページからデータベースの接続設定を読み込む
上記を設定しておけば、JSPページで以下のタグを記述するだけで、データベースに接続できるようになります。
<sql:setDataSource var="db" dataSource="jdbc/hoge_db" />
JNDIを使用すれば、各ページにデータベース名や、ユーザー名、パスワードを記述しないで済むため、それらの設定変更時にはcontext.xmlを変更するだけで済みます。
特にパスワードを定期的に変更する運用を行う場合は非常に有用です。
注意context.xmlを変更した場合は、Catalina/localhost配下にコピーされた<コンテキスト名>.xmlを削除してTomcatを再起動する必要があります。
公開日時:2014年08月09日 08:09:41
最終更新日時:2022年03月12日 02:37:15