5.2.3 システムで提供されるサービス: tpsvrdone( )関数

tpsvrinit()tpopen()を呼び出してリソース・マネージャをオープンするのと同じように、tpsvrdone()関数はtpclose()を呼び出してリソース・マネージャをクローズします。

ノート:

マルチスレッド・サーバーのコーディングでは、「マルチスレッドおよびマルチコンテキストATMIアプリケーションのプログラミング」に説明されているように、tpsvrthrdone()コマンドを使用して、リソース・マネージャを開く必要があります。

tpsvrdone()関数の呼出しには、次のシグネチャを使用します。

void
tpsvrdone()   /* Server termination routine */

tpsvrdone()関数に引数は必要ありません。

アプリケーションにtpsvrdone()のクローズ用ルーチンが定義されていない場合、main()で提供されるデフォルトのルーチンがOracle Tuxedoシステムによって呼び出されます。このルーチンは、tx_close()userlog()を呼び出してリソース・マネージャをクローズし、中央イベント・ログに書き込みます。ログには、サーバーが間もなく終了することを伝えるメッセージが送信されます。

tpsvrdone()は、サーバーがサービス・リクエストの処理を終了した後、サーバーが終了する前に呼び出されます。その場合、サーバーはまだシステムの一部なので、特定の規則に従っているかぎり、ルーチン内でさらに通信およびトランザクションが行われる場合があります。これらの規則については、「エラーの管理」を参照してください。

次のリストは、tpsvrdone()関数を使用して、リソース・マネージャをクローズして終了する方法を示しています。

tpsvrdone( )を使用したリソース・マネージャのクローズのリスト

void
tpsvrdone()
{

     /* Close the database */
     if(tpclose() == -1)
           (void)userlog("tpsvrdone: failed to close database: ");
           switch (tperrno) {
                  case TPESYSTEM:
                          (void)userlog("ORACLE TUXEDO error\n");
                          break;
                  case TPEOS:
                        (void)userlog("Unix error %d\n",Uunixerr);
                        break;
                  case TPEPROTO:
                       (void)userlog("Called in improper context\n");
                       break;
                  case TPERMERR:
                       (void)userlog("RM failure\n");
                       break;

       }
        return;
 }
 return;
}