共有可能永続的ソケット接続は、コミット・モード 1 対話およびコミット・モード 0 の対話で使用できる接続です。
以下のシナリオは、通常処理、エラー処理、および実行タイムアウトにおける、共有可能永続的ソケットでの SYNC_SEND_RECEIVE 対話を表しています。
通常処理シナリオ
IMS™ TM リソース・アダプター は、アプリケーション・サーバーを使用して、接続プールから
使用可能な接続を取得するか、新規の接続を作成します。
IMS TM リソース・アダプターは、新規接続の初期化の一環として、その接続のためのクライアント ID を生成します。
生成されたクライアント ID によりソケット接続が識別され、また、コミット・モード 0 の対話では、tpipe および関連する OTMA 非同期保留キューが識別されます。
IMS TM リソース・アダプター は、ソケットがその接続に関連付けられるようにして、そのソケットを使用して、入力データを含む要求を IMS Connect に送信します。 そして、IMS
Connect が IMS に
メッセージを送信し、それを受け取った IMS が
トランザクションを実行して出力メッセージを戻します。
コミット・モード 0 の対話では、出力メッセージを受け取ると、IMS TM リソース・アダプターは ACK メッセージを IMS に送信します。
このメッセージは、IMS に対して、IMS キューからその出力を廃棄するように指示します。
クライアント・アプリケーションが接続を閉じたり終了したりすると、
接続は接続プールに戻され、他のコミット・モード 0 またはコミット・モード 1 の対話によって再利用できるようになります。
エラー処理シナリオ
エラーが発生した場合には必ず、リソース例外がクライアント・アプリケーションにスローされます。
また、エラーによっては、IMS
Connect によってソケットが切断される場合もあります。
コミット・モード 0
の対話の場合、例外は、出力メッセージをクライアント・アプリケーションに配信できないことを意味します。
ただし、配信されなかった出力を特定の宛先に転送するように SYNC_SEND_RECEIVE 対話で指定されている場合は、例外に続いて、共有可能永続的ソケット接続でのコミット・モード 0 の対話に関する配信されなかった出力メッセージを検索できます。
配信されなかった出力メッセージを特定の宛先に転送するには、SYNC_SEND_RECEIVE
対話で渡される
IMSInteractionSpec オブジェクトで、以下のように追加のプロパティーを指定する必要があります。
- purgeAsyncOutput プロパティーは、配信されなかった出力がパージされないようにするために、false に設定します。
- reRoute プロパティーを true に設定し、RouteName プロパティーで転送宛先を指定します。
配信されなかった出力を転送宛先から検索するために、別のクライアント・アプリケーションから、専用永続的ソケット接続で
SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 対話または SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 対話を実行します。
クライアント・アプリケーションは、対話のクライアント ID として、転送宛先を指定します。
あるいは、配信されなかった出力を転送宛先から検索するために、別のクライアント・アプリケーションから、代替クライアント ID を指定することで、共有可能永続的ソケット接続で SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT 対話または SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 対話を実行することができます。
代替クライアント ID を使用することによって、クライアント・アプリケーションは任意の tpipe から配信されなかった非同期出力メッセージを検索することができます。
purgeAsyncOutput プロパティーのデフォルト値は true です。
purgeAsyncOutput プロパティーの値が true の場合、以下の出力メッセージはパージされます。
- 1 次 IMS アプリケーション・
プログラムによって入出力プログラム連絡ブロック (I/O PCB) に挿入された、配信されなかった出力メッセージ
- プログラム間の切り替えによって起動された 2 次 IMS アプリケーション・
プログラムによって入出力 PCB に挿入された出力メッセージ。
purgeAsyncOutput プロパティーが false に設定されている場合は、転送宛先を
指定する必要があります。
実行タイムアウトのシナリオ
実行タイムアウトが発生した場合、ソケット接続はオープンしたままになりますが、
出力メッセージはクライアント・アプリケーションに配信されません。
ただし、実行タイムアウト例外に続いて、以下の 2 つの方法のいずれかで、共有可能永続的ソケット接続でのコミット・モード 0 の対話に関する配信されなかった出力メッセージを検索できます。
- SYNC_SEND_RECEIVE 対話を実行した同じクライアント・アプリケーションで、SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT
対話または SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT 対話を実行する。
- エラー処理シナリオで説明したように、配信されなかった出力メッセージを特定の宛先に転送する。
クライアント・
アプリケーションが接続を閉じたり終了したりすると、接続は接続プールに戻され、
他のコミット・モード 0 の対話またはコミット・モード 1 の対話によって再利用できるようになります。