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

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

2.4.3 データソースによるデータベースへの接続で使用できる機能

ここでは,データソースによるデータベースへの接続機能について説明します。

なお,データソースの設定については,「2.10 ベーシックモードの設定」を参照してください。

データソースを利用すると,J2EEサーバと連携して,J2EEアプリケーションから次に示す機能を利用できます。

<この項の構成>
(1) サインオン
(2) コネクション管理
(3) トランザクション管理
(4) オブジェクトの自動クローズ
(5) パフォーマンスチューニングのための機能
(6) フォールトトレランスのための機能
(7) データソースを使用するときの注意

(1) サインオン

データソースを利用した場合,サインオンの方式として,コンテナ管理のサインオンとコンポーネント管理のサインオンの両方を使用できます。ただし,コンポーネント管理でのサインオンの場合,トランザクションの種類によって使用が制限されます。

コンテナ管理でのサインオンの場合
コンテナ管理でのサインオンの場合には,データソースで設定したユーザ名とパスワードを使ってデータベースにアクセスします。

コンポーネント管理でのサインオンの場合
データベースへのアクセスはgetConnectionメソッドで渡されたユーザ名とパスワードを使ってデータベースにアクセスします。

(2) コネクション管理

データベースの接続情報は,データソースを介してJ2EEサーバで管理され,コネクションプールにプーリングされます。

(3) トランザクション管理

ローカルトランザクションでトランザクション管理されます。

トランザクションについては,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「3.4 トランザクション管理」を参照してください。

(4) オブジェクトの自動クローズ

データソースは,ユーザハンドル(java.sql.Connection)から生成された,Statementオブジェクト,PreparedStatementオブジェクト,CallableStatementオブジェクト,および各種ステートメントやDatabaseMetaDataから生成されたResultSetオブジェクトを自動クローズできます。

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

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

表2-23 ベーシックモードでデータベースに接続する場合に使用できるパフォーマンスチューニングのための機能

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

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

注※1 1.4モードとの機能差の有無です。

注※2 ベーシックモードでコネクションシェアリング機能を利用するには,コネクションプーリング機能を利用する必要があります。なお,標準DDの<res-sharing-scope>にUnshareableを指定してもコネクションシェアリングは有効です。


以降,ベーシックモードで使用できるパフォーマンスチューニングのための機能について説明します。なお,それぞれの機能の概要および目的については,次の個所を参照してください。

ここでは,ベーシックモードで特有の内容についてだけ説明します。

コネクションプーリング
J2EEサーバでは,JDBCデータソースごとにプールを作成して管理します。JDBCデータソースに最大値,最小値,増加,しきい値などを指定することで,プーリングの動作をカスタマイズできます。
J2EEコンポーネントがJDBCデータソースからJDBCコネクションを取得したとき,最小値分のJDBCコネクションが生成されプーリングされます。また,JDBCコネクションは最大値分までプーリングされます。プール中の未使用JDBCコネクションの数がしきい値分以下になったとき,新たに増加分のJDBCコネクションを取得してプールに補充します。プーリングされるJDBCコネクションの数は,J2EEコンポーネントからのデータベースアクセス量に応じて,最大値と最小値の間になります。
なお,JDBCコネクションプーリングは,同一JDBCデータソースに対して,引数なしのgetConnection()メソッドと引数ありのgetConnection(java.lang.String username,java.lang.String password)メソッド間では,別のプールになります。
また,引数ありのgetConnection(java.lang.String username,java.lang.String password)メソッド間でusernameが異なる場合,別のプールになります。なお,J2EEサーバ間のJDBCコネクションプーリングは,サポートしていません。

コネクションシェアリング
1.4モードとの機能差はありません。

DataSourceオブジェクトのキャッシング
1.4モードとの機能差はありません。

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

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

表2-24 ベーシックモードでデータベースに接続する場合に使用できるフォールトトレランスのための機能

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

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

注※ 1.4モードとの機能差です。


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

なお,それぞれの機能の概要および目的については,次の個所を参照してください。

ここでは,ベーシックモードで特有の内容についてだけ説明します。

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

コネクションプールの情報表示
コネクションプール内のコネクションの情報を,コマンドを使用して表示できます。コネクションプール情報の表示には,cjclosecnコマンドを使用します。コマンドの詳細については,「cjclosecn(J2EEサーバのコネクションクローズまたはコネクションの状態表示)」を参照してください。

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

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

コネクションの自動クローズ
EJBコンテナによるコネクション自動クローズだけが有効になります。また,対象となるリソースは,データソースだけです。

コネクションスイーパ
一定間隔でコネクションプールを監視し,一定時間使用していない未使用コネクションを破棄します。ベーシックモードでのコネクションスイーパの動作については,「2.11.5 コネクションプーリングとコネクションスイーパの動作」を参照してください。

トランザクションタイムアウト
  • ローカル呼び出し最適化機能を使用するかどうかによって,トランザクションタイムアウト後のJTAおよびJDBCインタフェースにアクセスできない期間が異なります。
    ローカル呼び出し最適化機能を使用しない場合,該当するトランザクションを含むリモートインタフェースのメソッドが終了すればアクセスできます。ローカル呼び出し最適化機能を使用する場合は,リクエスト終了するまでアクセスできません。
  • トランザクションタイムアウトが発生すると,トランザクションの状態がjavax.transaction.Status.STATUS_NO_TRANSACTIONになるため,Required属性,Supports属性,またはNever属性のビジネスメソッドが呼び出されます。トランザクションタイムアウト後にビジネスメソッドが呼び出されないようにするには,Mandatory属性を使用してください。ただし,ローカル呼び出し最適化機能を使用する場合は,トランザクションタイムアウト後に新しいトランザクションを開始できないので,タイムアウト後にRequired属性またはRequiresNew属性のビジネスメソッドは呼び出されません。
  • ローカル呼び出し最適化機能を使用して,タイムアウトの発生後にStateful Session Bean(BMT)を呼び出した場合,またはリモートインタフェースのメソッド呼び出し中(トランザクションがサスペンド中)にタイムアウトが発生した場合,J2EEアプリケーションにタイムアウトの発生を通知しません。
    J2EEアプリケーションでこの内容を考慮していない場合,意図しないDBMSのアクセスによる,データの不整合などの問題が発生するおそれがあります。この問題を回避するため,ローカル呼び出し最適化機能を使用しないか,または次の対策を行ってください。
    JTA,またはJDBCインタフェースのアクセスで例外が発生した場合,およびリモートインタフェースのメソッド呼び出しでRemoteException例外が発生した場合は,リクエストを終了させます。また,Stateful Session Bean(BMT)を使用する場合は,そのメソッド内で,JTA,JDBCインタフェースに対して,必ずアクセスします。

(7) データソースを使用するときの注意