6.1.7. データベース接続管理ハンドラ

後続のハンドラ及びライブラリで使用するためのデータベース接続を、スレッド上で管理するハンドラ。

データベースアクセスの詳細は、 データベースアクセス(JDBCラッパー) を参照。

重要

このハンドラを使用する場合は、 トランザクション制御ハンドラ をセットで設定すること。 トランザクション制御ハンドラが設定されていない場合、トランザクション制御が実施されないため後続で行ったデータベースへの変更は全て破棄される。

本ハンドラでは、以下の処理を行う。

  • データベース接続の取得
  • データベース接続の解放

処理の流れは以下のとおり。

../../../../_images/DbConnectionManagementHandler_flow.png

6.1.7.2. モジュール一覧

<dependency>
  <groupId>com.nablarch.framework</groupId>
  <artifactId>nablarch-core-jdbc</artifactId>
</dependency>
<dependency>
  <groupId>com.nablarch.framework</groupId>
  <artifactId>nablarch-common-jdbc</artifactId>
</dependency>

6.1.7.3. 制約

なし。

6.1.7.4. データベースの接続先を設定する

このハンドラは、 connectionFactory プロパティに設定されたファクトリクラス( ConnectionFactory 実装クラス )を使用してデータベース接続を取得する。

以下の設定ファイル例を参考にし、 connectionFactory プロパティにファクトリクラスを設定すること。

<!-- データベース接続管理ハンドラ -->
<component class="nablarch.common.handler.DbConnectionManagementHandler">
  <property name="connectionFactory" ref="connectionFactory" />
</component>

<!-- データベース接続オブジェクトを取得するファクトリクラスの設定 -->
<component name="connectionFactory"
    class="nablarch.core.db.connection.BasicDbConnectionFactoryForDataSource">
  <!-- プロパティの設定は省略 -->
</component>

重要

データベース接続オブジェクトを取得するためのファクトリクラスの詳細は、 データベースに対する接続設定 を参照。

6.1.7.5. アプリケーションで複数のデータベース接続(トランザクション)を使用する

1つのアプリケーションで複数のデータベース接続が必要となるケースが考えられる。 この場合は、このハンドラをハンドラキュー上に複数設定することで対応する。

このハンドラは、データベース接続オブジェクトをスレッド上で管理する際に、データベース接続名をつけて管理している。 データベース接続名は、スレッド内で一意とする必要がある。

データベース接続名は、このハンドラの connectionName プロパティに設定する。 connectionName への設定を省略した場合、その接続はデフォルトのデータベース接続となり簡易的に使用できる。 このため、最もよく使うデータベース接続をデフォルトとし、それ以外のデータベース接続に対して任意の名前をつけると良い。

以下にデータベース接続名の設定例を示す。

<!-- データベース接続を取得するファクトリの設定は省略 -->

<!-- デフォルトのデータベース接続を設定 -->
<component class="nablarch.common.handler.DbConnectionManagementHandler">
  <property name="connectionFactory" ref="connectionFactory" />
</component>

<!-- userAccessLogという名前でデータベース接続を登録 -->
<component class="nablarch.common.handler.DbConnectionManagementHandler">
  <property name="connectionFactory" ref="userAccessLogConnectionFactory" />
  <property name="connectionName" value="userAccessLog" />
</component>

上記のハンドラ設定の場合の、アプリケーションからのデータベースアクセス例を以下に示す。 なお、データベースアクセス部品の詳細な使用方法は、 データベースアクセス(JDBCラッパー) を参照。

デフォルトのデータベース接続を使用する

DbConnection#getConnection 呼び出し時に引数を指定する必要が無い。 引数を指定しないと、自動的にデフォルトのデータベース接続が戻される。

AppDbConnection connection = DbConnectionContext.getConnection();
userAccessLogデータベース接続を使用する

DbConnection#getConnection(String) を使用し、引数にデータベース接続名を指定する。 データベース接続名は connectionName プロパティに設定した値と一致させる必要がある。

AppDbConnection connection = DbConnectionContext.getConnection("userAccessLog");