データベースの接続情報は、開発環境から実行環境への移行や、アプリケーションをパッケージとして配布する際に変更する必要があります。この情報は大概「.jsp」ファイルや「.java」ファイルに分散して記述されており、実行環境への移行やパッケージとしての配布の際に、修正漏れや間違いを引き起こしやすい要因といえるでしょう。
この問題を解決する方法の1つに、JNDI(Java Naming and Directory Interface)を使って環境に依存する(かつアプリケーション内で共通して使用する)情報をアプリケーション上で一元的に管理するというテクニックがあります。JNDIを採用することで、個々の「.jsp」「.java」ファイルにいちいち接続情報を記述する必要はなくなりますし、接続先のデータベースに変更があった場合にも容易に変更が可能となります。もちろん、「.java」ファイルのコンパイルなども不要になります。
Tomcatのサーバ設定ファイルserver.xmlは、Tomcatインストールフォルダ配下の「conf」フォルダに含まれています。
server.xmlをテキストエディタなどで開き、以下のように追加してください。赤字部分が追記するコードです。アプリケーションパス、アプリケーション名は、共に「javatips」とします。
<!-- Tomcat Root Context --> |
データベースへの接続設定は、アプリケーション(コンテキスト)単位で<Context>要素に記述します。データベースリソースの概要情報(外部リソース名やリソースの種類など)は<Resource>要素に、リソースに渡すパラメータ情報は<ResourceParams>要素に記述します。
<ResourceParams>要素に設定可能な主要なパラメータは以下のとおりです。
パラメータ名 | 概要 | |
---|---|---|
factory | データソース管理に使用するクラスの完全修飾名 | |
maxActive | データベースへの最大接続数(0のときは無制限) | |
maxIdle | コネクションプールに保持する最大接続数(0のときは無制限) | |
maxWait | 接続時のタイムアウト時間(ミリ秒。0のときは無制限) | |
usename | 接続時に使用するユーザ名(接続文字列に含めても可) | |
password | 接続時に使用するパスワード(接続文字列に含めても可) | |
C | データベース接続用のJDBCドライバ(完全修飾名) | |
url | データベース接続文字列 | |
factory、driverClassName、urlパラメータは必須指定です。なお、接続文字列に「&」が含まれている場合、必ず「&」のようにエスケープする必要がありますので、注意してください。
server.xmlで設定したデータソースをアプリケーション上で有効にするには、アプリケーション単位にweb.xml(例えば、「/webapps/javatips/WEB-INF/web.xml」)を設定する必要があります。
web.xmlをテキストエディタなどで開き、以下の内容を追加してください。web.xml上では要素の記述順も厳密に定められていますので、自分の環境に応じて、適切な個所に記述を追加してください。
<resource-ref> |
<resource-ref>要素配下の子要素の意味は、それぞれ以下のとおりです。
要素名 | 概要 | |
---|---|---|
<description> | 外部リソースの説明(任意) | |
<res-ref-name> | 外部リソースの参照名(server.xmlの<Resource>要素に対応。自由に設定することができます) | |
<res-type> | リソースのデータ型 | |
<res-auth> | リソースの制御(Container|Servlet) | |
<res-type>、<res-auth>要素は、ここでは固定値と思っておいて問題ないでしょう。なお、server.xml、web.xmlを編集した後は、必ずTomcatの再起動を忘れないようにしてください。ここまででデータソースの設定は完了です。
それでは、いよいよ「.jsp」ファイルを設置して、データソースに対して接続ができることを確認してみることにしましょう。
テキストエディタで新規文書を作成し、以下の「.jsp」ファイルを作成してみてください。
<%@ page contentType="text/html;charset=Shift_JIS" |
任意のファイル名で保存した「.jsp」ファイルに対して、ブラウザから問題なくアクセスできれば成功です。
Context#lookupは、登録された外部リソースを検出するためのメソッドで「java:comp/env/外部リソース名」の形式で指定します。lookupメソッドの戻り値はObjectオブジェクトですので、使用に際しては必ず「型のキャスト」を行うのを忘れないようにしてください。
取得したDataSourceオブジェクトのgetConnectionメソッドでConnectionオブジェクトを取得してしまえば、あとは通常のデータベース手続きとまったく同様です。データソースを再びコネクションプールに戻すために、closeメソッドは絶対に忘れないようにしてください(さもないと、使用中のデータソースが累積し、後続のリクエストがエラーとなってしまいます)。
Copyright © ITmedia, Inc. All Rights Reserved.