• トップページ
  • Java
  • server.xmlを使用せずにJNDIでデータベースの接続設定を一元化する

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
最終更新日時:2021年08月24日 13:09:39

なお、VPS選びで迷ったら、こちらの記事で主要VPSのメモリ容量ごとの月額、年額料金を比較していますので、是非参考にしてみてください。

Javaに戻る

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