6.3.1.2 例: 非同期リクエストの送信

以下のサンプル・コードは、銀行の総残高照会を行う非同期呼出しを示しています。銀行業務アプリケーションのデータは、複数のデータベース・サイトに分散されているので、各サイトに対してSQL問合せを実行する必要があります。その場合、データベース・サイトごとに支店番号が1つ選択され、そのサイトに対してABALまたはTBALサービスが呼び出されます。支店番号は実際のSQL問合せでは使用されませんが、この番号によってOracle Tuxedoシステムが適切なサイトにリクエストを送ることができるようになります。次のコードでは、サイトごとにforループがtpacall()を一度呼び出しています。

非同期リクエストの送信のリスト

audv->balance = 0.0;
(void)strcpy(audv->ermsg, "");

for (i=0; i<NSITE; i++) {

  /* Prepare aud structure */

audv->b_id = sitelist[i];     /* routing done on this field */

/* Do tpacall */

if ((cd[i]=tpacall(sname, (char *)audv, sizeof(struct aud), 0))
    == -1) {
   (void)fprintf (stderr,
      "%s: %s service request failed for site rep %ld\n",
       pgmname, sname, sitelist[i]);
       tpfree((char *)audv);
       return(-1);
    }
}