プールされた接続をアプリケーションに返却する前に、アプリケーションサーバは接続が有効か検証できます。この検証によって、EISがネットワーク障害かEIS自身の障害により利用不可となった場合、その接続をプールから破棄し、再度プールから接続を獲得して有効な接続を返却します。プールに有効な接続が存在しなかった場合、EISから新たな接続を獲得するため、接続を再確立できます。
接続検証には、以下が設定できます。
接続検証
すべての障害で
接続検証の成功/失敗について
接続検証が有効の場合、以下の処理により判定します。
検証成功
javax.resource.spi.ValidatingManagedConnectionFactoryインタフェースを実装していない時
ValidatingManagedConnectionFactoryインタフェースのgetInvalidConnections()メソッドの返却値がnull、サイズ0のSetオブジェクト、またはjavax.resource.ResourceExceptionを返却する時
検証失敗
ValidatingManagedConnectionFactoryインタフェースのgetInvalidConnections()メソッドの返却値が0より大きなサイズのSetオブジェクトを返却する時
接続検証の実行前に、すでに対象となる接続で障害が検出されているとき
接続検証の実行契機
アイドルタイムアウトの間隔で定期的に接続検証を実行します。接続検証に失敗した場合の動作は、「プールの定期監視(プールサイズのスケールダウン)」を参照してください。
プール内から取得した接続をアプリケーションへ返却する前に、接続検証を実行します。プールサイズのスケールアップにより新規作成された接続のうちアプリケーションへ返却する接続に対しては、検証不要のため接続検証をスキップします。また、プール初期化時に生成される接続は、プール内から取得した接続と見なし接続検証を実行します。接続検証に失敗した場合は、「すべての障害で」が有効かどうかで動作が変わります。
「すべての障害で」が有効の時:
「すべての障害で」の処理で一時的にプール内の接続が0になるのを補うために新たな接続を生成します。もしこの時点で再確立の処理が完了し未使用な接続があれば、置き換えて(破棄して)要求元へ接続を返却します。
「すべての障害で」が無効の時:
検証失敗の接続を削除し、プールから次の接続を取り出して再度接続検証を実施します。プール内の使用されていない接続がすべて接続検証に失敗した場合の動作は、「接続要求に応じたプールサイズのスケールアップ」を参照してください。
接続障害と判断される条件
「すべての障害で」が有効の場合に接続障害と判断される条件は、以下です。
javax.resource.spi.ManagedConnectionインタフェースのcleanup()メソッドの実行時に例外が発生した場合
javax.resource.spi.ConnectionEventListenerインタフェースのconnectionErrorOccurred()メソッドをリソースアダプタから呼び出した場合
javax.resource.spi.ConnectionEventListenerの実装は、アプリケーションサーバからjavax.resource.spi.ManagedConnectionのaddConnectionEventListener()メソッドが呼び出されたときに渡されます。「すべての障害で」を有効にする場合、EISとの接続障害に対する通知処理を実装してください。
注意
接続を再確立できなかった場合には、例外が返却されます。
接続の検証には若干の性能オーバーヘッドが発生します。