5.2.2.2 リソース・マネージャのオープン

次のサンプル・コードは、tpsvrinit()のもう1つの使用法として、リソース・マネージャをオープンする方法を示しています。Oracle Tuxedoシステムには、リソース・マネージャをオープンする関数として、tpopen(3c)tx_open(3c)があります。また、これらと対の関数として、tpclose(3c)tx_close(3c)があります。これらの関数を使用してリソース・マネージャをオープンしたりクローズするアプリケーションは、その意味では移植性があります。これらは、構成ファイルに設定されたリソース・マネージャのインスタンス固有の情報にアクセスすることによって動作します。

ノート:

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

これらの関数呼出しは省略可能で、リソース・マネージャがデータベースの場合、リソース・マネージャ固有の呼出しがデータ操作言語(DML)の一部であるときは、その呼出しのかわりに使用できます。userlog(3c)関数を使用して、中央イベント・ログに書き込んでいることに注目してください。

ノート:

コマンド行オプションを受け取り、データベースをオープンする初期化関数を作成するには、次のリストに示すサンプル・コードと前述のサンプル・コードを組み合せます。

tpsvrinit( )を使用したリソース・マネージャのオープンのリスト

tpsvrinit()
{

   /* Open database */

   if (tpopen() == -1) {
         (void)userlog("tpsvrinit: failed to open database: ")
        switch (tperrno) {
          case TPESYSTEM:
              (void)userlog("System 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(-1); /* causes the server to exit */
     }
    return(0);
  }

初期化時にエラーが発生しないように、サーバーを終了してからサービス・リクエストの処理を開始するようにtpsvrinit()をコーディングできます。

関連項目:

tpopen(3c)tx_open(3c)、およびその対の関数tpclose(3c)tx_close(3c)の詳細は、「セクション3c - C関数」を参照してください