スマートデバイスアプリ開発のあれやこれや

Tomcat 8.0系でのデータソース定義

Tomcat上で動くWebアプリでDB接続する必要があり
データソースの定義ってどうやるんだ?!と思って調べてみました。
ちなみにEclipseでDynamic Web Projectで開発したケース......です。


検証環境は以下の通り。

1. context.xmlを作成する

META-INFフォルダの直下にcontext.xmlという名前でファイルを作成します。
このファイルをTomcatが読み込んでコネクションプーリングを行います。
従ってデータベースの場所やら接続情報、JNDIのアクセス名などの情報を書き込みます。

<Context>
    <Resource name="jdbc/myapp" 
              auth="Container"
              type="javax.sql.DataSource" 
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/webapp"
              username="" 
              password="" />
</Context>


今回は設定していませんが
「maxActive(最大接続数)」「maxIdle(最低接続維持数)」「maxWait(タイムアウト時間)」
などの設定も付与可能です。

詳しくはTomcat公式をご覧くださいー。

2. web.xmlに参照情報を付与する

Tomcatが確保したコネクションをWebアプリから取得するため
web.xmlに参照情報を付与します。

  <resource-ref>
    <res-ref-name>jdbc/myapp</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>


注意点としては、各要素の設定情報は
「context.xml」でのネーミングと一致させることです。

3. 設定が上手くいってるか確かめてみる

実際にコードを書いて試してみます。
単純にDataSourceインスタンスが取れるかどうかで判定する例。

InitialContext context = new InitialContext();
DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/myapp");

if (ds != null) {
  System.out.println("データ取得できたー!");
}


さて、上手く取れてるでしょうか?