検索
連載

JNDI活用でデータソース管理を一元化するJavaTips 〜アプリケーションサーバ/コンテナ活用編

Share
Tweet
LINE
Hatena

 データベースの接続情報は、開発環境から実行環境への移行や、アプリケーションをパッケージとして配布する際に変更する必要があります。この情報は大概「.jsp」ファイルや「.java」ファイルに分散して記述されており、実行環境への移行やパッケージとしての配布の際に、修正漏れや間違いを引き起こしやすい要因といえるでしょう。

 この問題を解決する方法の1つに、JNDI(Java Naming and Directory Interface)を使って環境に依存する(かつアプリケーション内で共通して使用する)情報をアプリケーション上で一元的に管理するというテクニックがあります。JNDIを採用することで、個々の「.jsp」「.java」ファイルにいちいち接続情報を記述する必要はなくなりますし、接続先のデータベースに変更があった場合にも容易に変更が可能となります。もちろん、「.java」ファイルのコンパイルなども不要になります。

操作手順

(1)server.xmlを編集する

 Tomcatのサーバ設定ファイルserver.xmlは、Tomcatインストールフォルダ配下の「conf」フォルダに含まれています。

 server.xmlをテキストエディタなどで開き、以下のように追加してください。赤字部分が追記するコードです。アプリケーションパス、アプリケーション名は、共に「javatips」とします。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 データベースへの接続設定は、アプリケーション(コンテキスト)単位で<Context>要素に記述します。データベースリソースの概要情報(外部リソース名やリソースの種類など)は<Resource>要素に、リソースに渡すパラメータ情報は<ResourceParams>要素に記述します。

 <ResourceParams>要素に設定可能な主要なパラメータは以下のとおりです。

パラメータ名 概要
factory データソース管理に使用するクラスの完全修飾名
maxActive データベースへの最大接続数(0のときは無制限)
maxIdle コネクションプールに保持する最大接続数(0のときは無制限)
maxWait 接続時のタイムアウト時間(ミリ秒。0のときは無制限)
usename 接続時に使用するユーザ名(接続文字列に含めても可)
password 接続時に使用するパスワード(接続文字列に含めても可)
C データベース接続用のJDBCドライバ(完全修飾名)
url データベース接続文字列

 factory、driverClassName、urlパラメータは必須指定です。なお、接続文字列に「&」が含まれている場合、必ず「&amp;」のようにエスケープする必要がありますので、注意してください。

(2)web.xmlを編集する

 server.xmlで設定したデータソースをアプリケーション上で有効にするには、アプリケーション単位にweb.xml(例えば、「/webapps/javatips/WEB-INF/web.xml」)を設定する必要があります。

 web.xmlをテキストエディタなどで開き、以下の内容を追加してください。web.xml上では要素の記述順も厳密に定められていますので、自分の環境に応じて、適切な個所に記述を追加してください。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 <resource-ref>要素配下の子要素の意味は、それぞれ以下のとおりです。

要素名 概要
<description> 外部リソースの説明(任意)
<res-ref-name> 外部リソースの参照名(server.xmlの<Resource>要素に対応。自由に設定することができます)
<res-type> リソースのデータ型
<res-auth> リソースの制御(Container|Servlet)

 <res-type>、<res-auth>要素は、ここでは固定値と思っておいて問題ないでしょう。なお、server.xml、web.xmlを編集した後は、必ずTomcatの再起動を忘れないようにしてください。ここまででデータソースの設定は完了です。

(3)データソースに接続する「.jsp」ファイルを記述する

 それでは、いよいよ「.jsp」ファイルを設置して、データソースに対して接続ができることを確認してみることにしましょう。

 テキストエディタで新規文書を作成し、以下の「.jsp」ファイルを作成してみてください。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 任意のファイル名で保存した「.jsp」ファイルに対して、ブラウザから問題なくアクセスできれば成功です。

 Context#lookupは、登録された外部リソースを検出するためのメソッドで「java:comp/env/外部リソース名」の形式で指定します。lookupメソッドの戻り値はObjectオブジェクトですので、使用に際しては必ず「型のキャスト」を行うのを忘れないようにしてください。

 取得したDataSourceオブジェクトのgetConnectionメソッドでConnectionオブジェクトを取得してしまえば、あとは通常のデータベース手続きとまったく同様です。データソースを再びコネクションプールに戻すために、closeメソッドは絶対に忘れないようにしてください(さもないと、使用中のデータソースが累積し、後続のリクエストがエラーとなってしまいます)。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る