![]() |
![]() |
|
|
会話の終了
次の場合、接続が切断されて会話が正常に終了します。
注記 TPRETURN ルーチンについては、「クライアントおよびサーバへの要求/応答のコーディング」を参照してください。
以下の節では、会話を正常に終了する方法について、2 つの例を挙げて説明します。これらの会話には、TPRETURN 関数を使用するグローバル・トランザクションは含まれていません。
最初の例では、2 つのコンポーネント間の単純な会話を終了する方法を示します。2 番目の例では、会話が階層構造になっている複雑な会話を終了する方法を示します。
接続がオープンになっているときに会話を終了すると、エラーが返されます。その場合、TPCOMMIT または TPRETURN は失敗します。
例: 単純な会話の終了
次の図は、正常に終了する A と B 間の単純な会話を示しています。
正常に終了する単純な会話
注記 この例では、A はクライアントまたはサーバのどちらでもかまいませんが、B はサーバでなければなりません。
例: 階層構造の会話の終了
次の図は、正常に終了する階層構造の会話を示しています。
接続の階層構造
この例では、サービス B は会話のメンバで、2 番目のサービス C との接続を開始しています。つまり、A - B 間 と B - C 間という 2 つのアクティブな接続が存在しています。B がこの両方の接続を制御している場合に TPRETURN の呼び出しを行うと、呼び出しは失敗し、すべてのオープン接続に TPEV_SVCERR イベントが通知され、接続が切断されます。 両方の接続を正常に終了するには、次の処理を順に行います。
注記 会話型サービスは、別のサービスと通信するために要求/応答型の呼び出しを行うことができます。そのため、前述の例では、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) を参照してください。
![]() |
![]() |
![]() |
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|