•  > 
  •  > 
  • server.xmlを使用せずにJNDIでデータベースの接続設定を一元化する

server.xmlを使用せずにJNDIでデータベースの接続設定を一元化する

カテゴリ:Java

Tomcatでcontext.xmlを使用する

JNDI(Java Naming and Directory Interface)を使用する場合、Tomcatのserver.xmlにリソース情報を記述する事も出来ますが、その場合アプリケーションごとに設定を保持、管理できないため不便です。
その場合、META-INFディレクトリ内のcontext.xmlを使用します。
context.xmlを使用する場合、Tomcatの起動時に以下のディレクトリにMETA-INFディレクトリ内のcontext.xmlが<コンテキスト名>.xmlにリネームされてコピーされます。
/etc/tomcat6/Catalina/localhost/
または
/usr/share/tomcat6/conf/Catalina/localhost/
もし、context.xmlを変更した場合は、コピーされた該当の<コンテキスト名>.xmlファイルを一旦削除してTomcatを再起動することで反映されます。
# ls -la /etc/tomcat6/Catalina/localhost
合計 20
drwxrwxrwx 2 root   tomcat 4096  5月 26 04:51 2013 .
drwxrwxr-x 3 root   tomcat 4096 10月 21 11:38 2012 ..
-rw-r--r-- 1 tomcat tomcat  422  5月 26 04:07 2013 ROOT.xml
-rw-r--r-- 1 tomcat tomcat  431  5月 26 04:51 2013 article_entry.xml
-rw-r--r-- 1 tomcat tomcat  424  5月 26 04:50 2013 mobile.xml

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を変更した場合は、/etc/tomcat6/Catalina/localhost配下にコピーされた<コンテキスト名>.xmlを削除してTomcatを再起動する必要があります。

公開日時: 2014年08月09日  08:09:41

Javaに戻る

このページのトップに戻る