Cosminexus V9 アプリケーションサーバ 機能解説 互換編

[目次][用語][索引][前へ][次へ]

3.6.3 Webコンテナコネクションプール機能によるデータベース接続

サーブレットエンジンモード上で動作するWebアプリケーションからデータベースへ接続する場合,Webコンテナコネクションプーリング機能を利用してデータベースへの接続をプールできます。これによって,コネクション生成時のパフォーマンスを向上できます。

Webコンテナコネクションプール機能での,コネクションの取得方法には次の2とおりがあります。

  1. java.sql.DriverManager.getDriverを使ってjava.sql.Driverのインスタンスを取得し,java.sql.Driver.connectを使ってコネクションを取得する方法
  2. java.sql.DriverManager.getConnectionを使ってコネクションを取得する方法

なお,コネクションプールの詳細については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「3.14.1 コネクションプーリング」を参照してください。

<この項の構成>
(1) Webコンテナコネクションプール機能の利用方法
(2) パフォーマンスチューニングのための機能
(3) フォールトトレランスのための機能

(1) Webコンテナコネクションプール機能の利用方法

Webコンテナコネクションプール機能を利用するためには,管理機能用のWebアプリケーションをデプロイし,プール管理情報を登録する必要があります。プール管理情報の登録をするためのコネクションプーリングの設定については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「3.14.1 コネクションプーリング」を参照してください。

また,コネクションの取得処理はWebアプリケーションで実施するため,ユーザ作成のアプリケーションに,コネクションを操作するための記述が必要になります。

コネクションを取得するには,次の2とおりの方法があります。同時に多数のユーザが接続するようなシステムの場合は,ドライバマネージャ内で待ちが発生するため,取得方法1の記述をお勧めします。

取得方法1
String className = "com.hitachi.software.web.jdbc.WccpDriver";
String url = "jdbc:hitachi:wccp://DBID=<データベースID>";
 
Properties info = new Properties();
info.put("user", "<ユーザID>");
info.put("password", "<パスワード>");
 
Class.forName(className);
Driver drv = DriverManager.getDriver(url);
Connection con = drv.connect(url, info);
con.close();

取得方法2
String className = "com.hitachi.software.web.jdbc.WccpDriver";
String url = "jdbc:hitachi:wccp://DBID=<データベースID>";
String user = "<ユーザID>";
String password = "<パスワード>";
 
Class.forName(className);
Connection con = DriverManager.getConnection(url, user, password);
con.close();

(2) パフォーマンスチューニングのための機能

サーブレットエンジンモードでデータベースに接続する場合に,パフォーマンスチューニングのために使用できる機能を,次の表に示します。

表3-22 サーブレットエンジンモードでデータベースに接続する場合に使用できるパフォーマンスチューニングのための機能

機能 使用可否
コネクションプーリング
コネクションシェアリング ×
コネクションのアソシエーション ×
ステートメントプーリング ×
ライトトランザクション ×
インプロセストランザクションサービス ×
DataSourceオブジェクトのキャッシング ×
DB Connectorのコンテナ管理でのサインオンの最適化 ×
受信バッファのプーリング ×

(凡例)○:使用できる ×:使用できない


サーブレットエンジンモードの場合のコネクションプーリングについて次に説明します。

コネクションプーリング
サーブレットエンジンモードの場合,プーリングの基本機能として,コネクションプールの生成初期化,コネクションの取得や解放などの機能を提供しています。
  • コネクションプールの生成および初期化
    コネクションプールが生成・初期化されるタイミングは,リソースのスタート処理時または監視・制御機能で提供するAPIのクラスのインスタンスの生成時です。ただし,この時点ではコネクションは生成されません。
    コネクションが最初に生成されるのは,最初のコネクション取得要求があったときです。以降,プールの最小値までコネクションをプールします。この動作は,非同期で実施されます。
  • コネクションの取得と解放
    コネクションの取得要求があると,プールから未使用のコネクションを選択し,コネクションの状態を使用中にしてから,クライアントに渡します。
    また,コネクションの解放要求があると,使用中になっているコネクションの状態を未使用に設定して,コネクションをプールに返します。なお,コネクションの状態が,再利用できない状態に設定されている場合は,データベースとの接続を切断して,コネクションを削除します。この場合,コネクションはプールに返されません。
  • 例外が発生したコネクションの破棄
    java.sql.ConnectionのようなJDBCインタフェースのAPIでSQLException例外が発生すると,コネクションクローズで該当コネクションの接続が維持されていても,コネクションプールに戻さないで破棄します。その結果,Webコンテナコネクションプーリングを使用している場合(java.sql.Connectionインタフェースだけ該当する)に,余分なコネクション生成が発生して性能に影響を与えることがあります。

(3) フォールトトレランスのための機能

サーブレットエンジンモードでデータベースに接続する場合に,フォールトトレランスのために使用できる機能を,次の表に示します。

表3-23 サーブレットエンジンモードでデータベースに接続する場合に使用できるフォールトトレランスのための機能

機能 使用可否
コネクションの障害検知 ×
コネクション枯渇時のコネクション取得待ち ×
コネクションの取得リトライ
コネクションプールの情報表示
コネクションプールのクリア
コネクションの強制クローズ
コネクションの自動クローズ ×
コネクションスイーパ ×
トランザクションタイムアウト ×
トランザクションリカバリ ×
障害調査用SQLの出力 ×
クラスタコネクションプール ×

(凡例)○:使用できる ×:使用できないまたは該当しない

注※ Webコンテナコネクションプールのコネクション取得リトライができます。


以降,サーブレットエンジンモードで使用できるフォールトトレランスのための機能について説明します。

なお,それぞれの機能の概要および目的については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「3.15 フォールトトレランスのための機能」を参照してください。ここでは,サーブレットエンジンモードで特有の説明についてだけ説明します。

コネクションの取得リトライ
J2EEサーバモードとの機能差はありません。マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「3.15.3 コネクションの取得リトライ」を参照してください。

コネクションプールの情報表示
コネクションプール内のコネクションの情報を,コマンドを使用して表示できます。コネクションプール情報の表示には,cjweblistpoolコマンドを使用します。コマンドの詳細については,「cjweblistpool(プール管理情報の一覧表示)」を参照してください。

コネクションプールのクリア
データベースサーバのダウンなどによって,コネクションが切断された場合,プールされているコネクションはコネクションプール内に残ってしまいます。これらのコネクションは,cjwebclearpoolコマンドによって削除できます。コマンドの詳細については,「cjwebclearpool(プール内のコネクションのクリア)」を参照してください。

コネクションの強制クローズ
アプリケーションのConnection.closeメソッドの記述もれによってクローズされないコネクションは,コネクションプール内で使用中状態のまま再利用されません。これらのコネクションは,cjwebclosepoolコマンドを使用して強制クローズできます。コマンドの詳細については,「cjwebclosepool(プール内のコネクションの強制切断)」を参照してください。
なお,ユーザスレッドでは使用できません。