BEA Logo BEA Tuxedo Release 8.0

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

 

   Tuxedo ホーム   |   C 言語を使用した 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() を呼び出すと -1 が返され、tperrno(5)TPEEVENT が設定 されてます。revent 引数に TPEV_SENDONLY が返されて、制御が B に移ったこ とが示されます。

  4. B は、rvalTPSUCCESS を設定して 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 は、状況に応じて rvalTPSUCCESSTPFAIL、または TPEXIT を設定して、 tpreturn() を呼び出します。

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

注記 会話型サービスは、別のサービスと通信するために要求/応答型の呼び出しを行うことができます。そのため、前述の例では、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) を参照してください。

 

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