StrutsでのDB利用サンプル(DataSourceの管理編)

StrutsでDBを利用するケースは頻繁にあると思いますが、Strutsでは特にDBアクセスの方法が明示的に決められているわけではありません。自由な方法でDBアクセスをすることを選択できます。

私の周りでは、「DB接続の取得→SQL発行→DB接続の終了」といった比較的レガシーな方法も未だに多いので、StrutsからどのようにDB接続を利用するかについて考察してみたいと思います。

※ちなみにレガシーでない方法というのは、StrutsのレイヤーではDBを意識させることのないアーキテクチャかと思います。ビジネスロジック層でO/Rマッピングなどを利用するのがイマドキの方法かと思います。

2つの観点を考察しています。

  1. DataSourceの管理←今回
  2. Connectionの維持

「DataSourceの管理」はDB接続をどのように取得するかについてです。Webアプリケーションの場合は、頻繁に接続切断が繰り返されることから、あらかじめDB接続プール(貯めこむ)しておく方法が一般的です。接続プールの用意や接続の取得方法について解説します。

「Connectionの維持」は、いつDB接続を取得し、得られた接続をどのように維持するかについて考察します。プログラムのあちこちで例外発生時のロールバック処理などを記述しなくても済むようにする必要があります。

今回は「DataSourceの管理」について書いてあります。

サンプルはこちらです。

DataSourceの管理

DB接続はDataSourceから取得します。DataSourceを用意する方法が2種類考えられます。
※APサーバ=アプリケーションサーバの意

Struts管理
レガシー。Webアプリケーションで用意。APサーバ非依存。
APサーバ管理(JNDI経由)
APサーバ管理のDataSourceを使用。Struts非依存。

Struts管理というのは、古いStrutsでは標準的なDB接続方法だったのですが、今ではあまり推奨されていません。APサーバが提供するDataSourceを使うべきなようです。
図のようにTomcat内に配備されたWebアプリケーションが、接続プールとDataSourceを持ちます。この実装を実現するためのライブラリやJDBCドライバは、すべてWebアプリケーションで用意する必要があります。
Struts管理

APサーバ管理は、Strutsに限った話ではなく標準のJ2EEの仕組みを使用したものです。DB接続をAPサーバに管理させ、そこから接続を拝借するというパターンです。
拝借するときにはAPサーバに依存しないように、これまた標準のJNDIという仕組みで取得します。JNDIというのは、名前を指定してオブジェクトを得る仕組みです。
この場合には、Webアプリケーション側にはJDBCドライバは必要なくTomcatに用意する必要があります。図のように接続プールを複数のWebアプリケーションで共有することも可能です。
APサーバ管理

相違点を表にするとこんな感じです。(*T*はTomcatにおける設定)

  Struts管理 APサーバ管理(JNDI経由)
DB接続担当 Struts APサーバ
接続プールの場所 Struts APサーバ
接続設定 struts-config.xml APサーバの設定
*T*server.xml (or context.xml)
JDBCドライバの配置場所 アプリケーションコンテキスト
WEB-INF/lib
APサーバ
*T*common/lib
追加で必要な依存ライブラリ commons-dbcp
commons-collection
commons-pool
なし
DataSourceの取得方法 Action#getDataSource JNDI経由

細かい実装はサンプルを参照していただくとして、それぞれの方法のポイントをまとめます。

Struts管理のポイント

  • 接続設定はstruts-configで行う
  • WEB-INF/libに、JDBCドライバ、commons-dbcp、commons-collection、commons-poolが必要
  • ActionのgetDataSourceメソッドでDataSourceを取得
  • サンプルプログラムStruts-DB1が実装例

APサーバ管理のポイント

  • 接続設定はAPサーバの機能で行う(APサーバごとに方法は違う)Tomcatの場合は、server.xmlで行う
  • JDBCドライバはAPサーバに用意する(APサーバごとに方法は違う)Tomcatの場合は、common/libにJARファイルを配置
  • JNDI経由でDataSource取得(サンプル参照のこと)
  • サンプルプログラムStruts-DB2が実装例

関連記事


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)