WebSphere Application Server for i5/OS, Version 6.1   
             オペレーティング・システム: i5/OS

             目次と検索結果のパーソナライズ化

接続のライフ・サイクル

ManagedConnection オブジェクトは、 常に DoesNotExistInFreePool、または InUse の 3 つの状況のいずれかになっています。

接続は、作成される前は、必ず DoesNotExist 状況になっています。 接続は、作成後にアプリケーションに割り振られるかどうかによって、InUse または InFreePool のいずれかの状況になります。

これらの 3 つの状況の間に遷移 があります。 これらの遷移は、保護条件 によって制御されます。 保護条件とは、 別の正当な状態への遷移を使用できる場合に true となる条件です。 例えば、以下の場合に限り、InFreePool 状態から InUse 状態への遷移が可能です。 この遷移の記述は以下のとおりです。

InFreePool > InUse:
getConnection AND
freeConnectionAvailable AND
NOT(shareableConnectionAvailable)

下記は、保護条件と説明についてのリストです。
条件 説明
ageTimeoutExpired 接続が ageTimeout 値を過ぎています。
close アプリケーションは、Connection オブジェクトの close メソッドを呼び出します。
fatalErrorNotification 接続に致命的エラーが生じました。
freeConnectionAvailable 一致するプロパティーを持つ接続がフリー・プール内で使用可能です。
getConnection アプリケーションは、データ・ソースまたは接続ファクトリー・オブジェクトで getConnection メソッドを呼び出します。
markedStale 接続が失効とマークされています。これは通常、致命的エラー通知に応答して行われます。
noOtherReferences 管理接続への接続ハンドルが 1 つしかなく、トランザクション・サービスが管理接続への参照を保持していません。
noTx 強制されているトランザクションはありません。
poolSizeGTMin 接続プールのサイズが最小のプール・サイズ (接続の最小数) より大きくなっています。
poolSizeLTMax プール・サイズが最大プール・サイズ (接続の最大数) より小さくなっています。
shareableConnectionAvailable この getConnection() 要求は共用可能接続に対するものです。一致するプロパティーを持つ接続は使用中で、かつ共用可能です。
TxEnds トランザクションが終了しました。
unshareableConnectionRequest この getConnection() 要求は、共用不可能接続に対するものです。
unusedTimeoutExpired 接続はフリー・プールにあり、未使用のタイムアウト値を過ぎても使用されていません。

接続の取得

最初に説明する一連の遷移は、 アプリケーションがデータ・ソースまたは接続ファクトリーのいずれかから接続を要求する場合の遷移です。 一部のシナリオでは、結果として新たにデータベースに接続されることがあります。 また、シナリオによっては、接続が接続プールから検索されたり、 別の接続要求によって共用されたりする場合もあります。

DoesNotExist

各接続は、DoesNotExist 状態でそのライフ・サイクルを開始します。 アプリケーション・サーバーの始動時には、 接続プールは存在しません。 したがって、接続はありません。 最初の接続は、アプリケーションがその最初の接続を要求するまで作成されません。 追加の接続は、保護条件に従い、必要に応じて作成されます。
getConnection AND
NOT(freeConnectionAvailable) AND
poolSizeLTMax AND
(NOT(shareableConnectionAvailable) OR
unshareableConnectionRequest)
この遷移は、以下の条件が発生しない限り、接続オブジェクトが作成されないことを指定します。
  • アプリケーションがデータ・ソースまたは接続ファクトリーで getConnection() メソッドを呼び出す
  • 使用可能な接続がフリー・プールにない (NOT(freeConnectionAvailable))
  • プール・サイズが最大プール・サイズより小さい (poolSizeLTMax)
  • 要求が共用可能接続に対するものであり、 同じ共用プロパティーを持つ、すでに使用中の共用可能接続がない場合 (NOT(shareableConnectionAvailable))、 または、要求が共用不可能接続に対するものである場合 (unshareableConnectionRequest)

すべての接続は、DoesNotExist 状態で開始し、 アプリケーションが接続を要求した場合にのみ作成されます。 アプリケーションが新規接続を要求すると、プールの接続数が 0 から最大数に増えます。 サーバーの始動時に、プールは最小接続数では作成されません

要求が共用可能接続に対するものであり、 同じ共用プロパティーを持つ接続がアプリケーションによってすでに使用されている場合、 接続は、2 つ以上の接続要求によって共用されます。 この場合、新規接続は作成されません。 JDBC API のユーザーの場合、 これらの共用プロパティーは、 たいていの場合、userid/password および transaction context ですが、 リソース・アダプターの Common Client Interface (CCI) のユーザーの場合は、 通常、ConnectionSpecSubject、および transaction context になります。

InFreePool

InFreePool 状態から InUse 状態への遷移は、 アプリケーションがプールからの接続を要求する際の最も一般的な遷移です。
InFreePool>InUse:
getConnection AND
freeConnectionAvailable AND
(unshareableConnectionRequest OR
NOT(shareableConnectionAvailable))
この遷移は、フリー・プールにある接続が以下の場合に使用されることを示します。
  • アプリケーションが getConnection() 呼び出しを実行済みである
  • 接続プールの接続が使用可能である (freeConnectionAvailable)
  • さらに次の 2 つの条件のいずれかを満たしている
    • 要求が共用不可能接続に対するものである (unsharableConnectionRequest)
    • 同じ共用プロパティーを持つ接続がトランザクションでまだ使用されていない (NOT(sharableConnectionAvailable))

フリー・プールからの接続によって実現できる接続要求では、 データベースに対する新規接続は作成されません。 したがって、アプリケーションがいくつであっても、 アプリケーションがプールから一度に複数の接続を使用しない場合は、 プールがサイズよりも大きくなることはありません。 この数は、プールに指定された最小接続数より小さくなる場合もあります。 プールが最小接続数になるとすれば、 アプリケーションに複数の並行する接続要求があり、 その結果、新規接続を作成しなければならなくなる場合です。

InUse

接続の共用という考えは、InUse 状態での遷移において見られます。
InUse>InUse:
getConnection AND
ShareableConnectionAvailable

この遷移は、すでに使用されている接続として、アプリケーションが同じ共用プロパティーを持つ共用可能接続 (ShareableConnectionAvailable) を要求した場合 (getConnection)、既存の接続が共用されることを示します。

同じユーザー (ユーザー名パスワード またはサブジェクト、認証する対象の選択に異なります) によって接続を共用できますが、 同一トランザクションで、共用プロパティーがすべて一致する場合に限られます。 JDBC 接続の場合、これらのプロパティーには resource-reference (IBM WebSphere 拡張機能) でデータ・ソース・デフォルトに対して構成可能な分離レベル が含まれます。 リソース・アダプターのファクトリー接続の場合、これらのプロパティーには ConnectionSpec オブジェクトで指定されたものが含まれます。 トランザクションは、通常、単一スレッドに関連付けられるため、 接続をスレッド間で共用するべきではありません
注: 複数のスレッドで同時に同じ接続を参照できますが、 これはエラー状態であり、たいていはアプリケーションのプログラミング・エラーが原因です。

接続の戻り

これまでの遷移の説明はすべて、アプリケーションが使用する接続の取得についてでした。 これを行うため、遷移の結果、接続は閉じられ、フリー・プールに戻るか、または破棄されます。 アプリケーションは、接続オブジェクトで close() を呼び出すことによって、接続を明示的に閉じる必要があります (注: ユーザーが取り戻す接続は、実際には接続ハンドル)。 ほとんどの場合、この結果は次のような遷移になります。
InUse>InFreePool:
(close AND
noOtherReferences AND
NoTx AND
UnshareableConnection)
OR
(ShareableConnection AND
TxEnds)
InUse 状態から遷移を引き起こす条件は以下のとおりです。
  • アプリケーションまたはコンテナー が close() を呼び出し (close 状態になる)、アプリケーション (アプリケーション共用状態) またはトランザクション・マネージャー (NoTx 状態。トランザクションで接続が確保されているときに、トランザクション・マネージャーが参照を保持する) のいずれも参照を行わない場合は (noOtherReferences)、フリー・プールに接続オブジェクトが戻されます。
  • 接続をトランザクションで確保していたが、 トランザクション・マネージャーがトランザクションを終了し (txEnds 状態)、接続が共用可能接続であった場合 (ShareableConnection 状態)、接続は閉じられ、プールに戻されます。

アプリケーションが接続で close() を呼び出すと、 その接続は空き接続のプールに戻されます。 アプリケーションは、データ・ストアへの接続は閉じません。 アプリケーションが現在共用されている接続で close() を呼び出すと、 その接続はフリー・プールには戻されません。 接続がプールに戻されるのは、接続への最後の参照がアプリケーションによって除去され、 トランザクションが終了した後だけです。 共用不可能接続を使用しているアプリケーションは、 タイミングよく接続を閉じる必要があります。 これに失敗すると、接続プールに接続がなくなり、サーバー上で稼働するアプリケーションが接続を取得できなくなる可能性があります。

アプリケーションがトランザクションで確保される接続で close() を呼び出すと、 接続はフリー・プールには戻されません。 トランザクション・マネージャーは、接続オブジェクトへの参照も保持する必要があるため、 トランザクションが終了するまで、接続はフリー・プールに戻ることができません。 接続がいったんトランザクションで確保されると、 トランザクションが完了するまで、 他のどのアプリケーションも他のどのトランザクションにおいてもこの接続を使用することはできません。

アプリケーションが close() を呼び出した結果、 データ・ストアへの接続が閉じて、プールへの接続の戻りが無視される場合があります。 この状態は、プール内の接続の 1 つが失効したと見なされた場合に起こります。 接続は、データ・ストアへの接続に使用できなくなると、失効したと見なされます。 例えば、 データ・ストア・サーバーがシャットダウンされると、 接続は失効したとマークされます。 接続が失効とマークされると、 おそらくすべての接続が同じ理由によって失効しているために、プール全体がデフォルトで空にされます (あるいは、失敗した接続のみを消去するように構成を設定できます)。 このクレンジングでは、 現行の InUse 接続のすべてに失効したとマークを付けるので、 接続は閉じると破棄されます。 以下の遷移は、 接続が失効とマークされたときに close() の呼び出しに対する振る舞いを示しています。
InUse>DoesNotExist:
close AND
markedStale AND
NoTx AND
noOtherReferences

この遷移は、アプリケーションが接続で close() を呼び出し、 プールのクレンジング・ステップで接続が失効したとマークされると (markedStale)、 接続オブジェクトがデータ・ストアに対して閉じ、プールには戻されないことを示しています。

最後に、データ・ストアに対する接続を閉じて、 それらの接続をプールから除去できます。

この遷移は、フリー・プールから接続が除去され、以下のように、破棄される場合が 3 つあることを示しています。
  1. リソース・アダプター (またはデータ・ソース) から致命的エラーの通知を受け取った場合。 致命的エラーの通知 (FatalErrorNotification) は、 接続に何かが起こり、接続が使用できなくなったときに、リソース・アダプターから受け取ります。 現在フリー・プールにある接続は、すべて破棄されます。
  2. 接続が未使用タイムアウト時間より長くフリー・プール内にあり (UnusedTimeoutExpired) プール・サイズが最小接続数より大きい場合 (poolSizeGTMin)、 接続はフリー・プールから除去され、破棄されます。 このメカニズムにより、接続の要求が減少したときに、プールをその最小サイズに縮小して戻すことができます。
  3. 経過時間タイムアウトが構成され、与えられた接続の経過時間がタイムアウトより長い場合。 このメカニズムは、経過時間に基づいて接続をリサイクルする方法を提供します。



関連概念
リソース・アダプター
データ・ソース
接続プール
共用不可能接続および共用可能接続
接続ハンドル
概念トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 5:46:14 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.base.iseries.doc/info/iseries/ae/cdat_conlifcyc.html