![]() |
![]() |
|
|
会話の終了
次の場合、接続が切断されて会話が正常に終了します。
注記 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() を使用することもできます。ただし、会話型サービスが tpforward() を呼び出すことはできません。
会話の切断
エラーの発生により接続を終了する唯一の方法は、tpdiscon(3c) 関数を呼び出すことです。これは、「プラグを抜くこと」と同じです。この関数を呼び出すことができるのは、会話のイニシエータ (クライアント) だけです。
注記 この方法で会話を終了することはお勧めしません。アプリケーションを正常に終了するには、下位サーバで tpreturn() 関数を呼び出します。
tpdiscon() 関数の呼び出しには、次の文法を使用します。
int
tpdiscon(int cd)
cd 引数は、接続が確立したときに tpconnect() 関数によって返される接続記述子を指定します。
tpdiscon() 関数は、接続の相手側のサービスに対して TPEV_DISCONIMM イベントを生成し、cd を無効にします。トランザクションが実行中の場合、そのトランザクションはアボートし、データは失われます。
cd で接続の開始側と識別されていないサービスから tpdiscon() が呼び出されると、その呼び出しは失敗し、エラー・コード TPEBADDESC が生成されます。
イベントおよびエラー・コードの全リストとその説明については、『BEA Tuxedo C リファレンス』の tpdiscon(3c) を参照してください。
![]() |
![]() |
![]() |
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|