共有可能永続的ソケットの処理モデル

共有可能永続的ソケット接続は、コミット・モード 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 の対話によって再利用できるようになります。


フィードバック