BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedo ホーム   |   COBOL を使用した BEA Tuxedo アプリケーションのプログラミング   |   先頭へ   |   前へ   |   次へ   |   目次

 


会話の終了

次の場合、接続が切断されて会話が正常に終了します。

注記 TPRETURN ルーチンについては、「クライアントおよびサーバへの要求/応答のコーディング」を参照してください。

以下の節では、会話を正常に終了する方法について、2 つの例を挙げて説明します。これらの会話には、TPRETURN 関数を使用するグローバル・トランザクションは含まれていません。

最初の例では、2 つのコンポーネント間の単純な会話を終了する方法を示します。2 番目の例では、会話が階層構造になっている複雑な会話を終了する方法を示します。

接続がオープンになっているときに会話を終了すると、エラーが返されます。その場合、TPCOMMIT または TPRETURN は失敗します。

例: 単純な会話の終了

次の図は、正常に終了する A と B 間の単純な会話を示しています。

正常に終了する単純な会話


 

次の順序で処理が行われます。

  1. A は、TPSENDONLY フラグで TPCONNECT を呼び出して接続を設定します。このフ ラグは、B が会話の受信側であることを示します。

  2. A は TPRECVONLY フラグで TPSEND を呼び出して、接続の制御を B に移します。 その結果、TPEV_SENDONLY イベントが生成されます。

  3. B が次に TPRECV を呼び出すと TP-STATUSTPEEVENT が設定されてます。 TPEVENTTPEV_SENDONLY が返されて、制御が B に移ったことが示されます。

  4. B は、TPRETURN-VAL IN TPSVCRETTPSUCCESS を設定して TPRETURN を呼び 出します。この呼び出しにより、A に対して TPEV_SVCSUCC イベントが生成さ れ、接続が正常に切断されます。

  5. A は、TPRECV を呼び出して、イベントが発生したことと会話が終了したことを 認識します。イベント TPEV_SVCFAIL が発生した場合でも、この TPRECV への呼 び出しでデータを受信できます。

注記 この例では、A はクライアントまたはサーバのどちらでもかまいませんが、B はサーバでなければなりません。

例: 階層構造の会話の終了

次の図は、正常に終了する階層構造の会話を示しています。

接続の階層構造


 

この例では、サービス B は会話のメンバで、2 番目のサービス C との接続を開始しています。つまり、A - B 間 と B - C 間という 2 つのアクティブな接続が存在しています。B がこの両方の接続を制御している場合に TPRETURN の呼び出しを行うと、呼び出しは失敗し、すべてのオープン接続に TPEV_SVCERR イベントが通知され、接続が切断されます。

両方の接続を正常に終了するには、次の処理を順に行います。

  1. B は、C との接続に TPRECVONLY フラグを設定して TPSEND を呼び出し、B - C 間 の接続の制御を C に渡します。

  2. C は、状況に応じて TPRETURN-VAL IN TPSVCRETTPSUCCESSTPFAIL、ま たは TPEXIT を設定して、TPRETURN を呼び出します。

  3. B は、TPRETURN を呼び出し、A にイベント (TPEV_SVCSUCC または TPEV_SVCFAIL) を通知します。

注記 会話型サービスは、別のサービスと通信するために要求/応答型の呼び出しを行うことができます。そのため、前述の例では、B から C への呼び出しに TPCONNECT ではなく TPCALL または TPACALL を使用することもできます。ただし、会話型サービスが TPFORWAR を呼び出すことはできません。

会話の切断

エラーの発生により接続を終了する唯一の方法は、TPDISCON(3cbl) ルーチンを呼び出すことです。これは、「プラグを抜くこと」と同じです。このルーチンを呼び出すことができるのは、会話のイニシエータ (クライアント) だけです。

注記 この方法で会話を終了することはお勧めしません。アプリケーションを正常に終了するには、下位サーバで TPRETURN ルーチンを呼び出します。

TPDISCON ルーチンの呼び出しには、次の文法を使用します。

01 TPSVCDEF-REC.
COPY TPSVCDEF.
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPDISCON" USING TPSVCDEF-REC TPSTATUS-REC.

COMM-HANDLE 引数は、接続が確立したときに TPCONNECT ルーチンによって返される通信ハンドルを指定します。

TPDISCON ルーチンは、接続の相手側のサービスに対して TPEV_DISCONIMM イベントを生成し、COMM-HANDLE を無効にします。トランザクションが実行中の場合、そのトランザクションはアボートし、データは失われます。

COMM-HANDLE で接続の開始側と識別されていないサービスから TPDISCON が呼び出されると、そのルーチンは失敗し、エラー・コード TPEBADDESC が生成されます。

イベントおよびエラー・コードの全リストとその説明については、『BEA Tuxedo COBOL リファレンス』の TPDISCON(3cbl) を参照してください。

 

先頭へ戻る 前のトピックへ 次のトピックへ