4.5 クライアント・プロセスの例

次のリストに示す擬似コードは、通常のATMIクライアント・プロセスがアプリケーションに参加してから分離するまでの処理を示しています。

通常のクライアント・プロセスのパラダイムのリスト

main()
{
    check level of security
    call tpsetunsol() to name your handler for TPU_DIP
    get usrname, cltname
    prompt for application password
    allocate a TPINIT buffer
    place values into TPINIT buffer structure members

    if (tpinit((TPINIT *) tpinfo) == -1){
         error routine;
}

allocate a message buffer
while user input exists {
    place user input in the buffer
    make a service call
    receive the reply
    check for unsolicited messages
}
free buffers
. . .
if (tpterm() == -1){   
      error routine;
    }
}

エラーが発生すると-1が返され、アプリケーションが外部グローバル変数tperrnoにエラーの原因を示す値を設定します。tperrnoは、atmi.hヘッダー・ファイルに定義されています。詳細は、『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』tperrno(5)に関する項を参照してください。通常、プログラマが発生したエラーの種類を示すエラー・コードをこのグローバル変数に設定します。tperrnoの値については、「システム・エラー」を参照してください。各ATMI呼出しで返される全エラー・コードのリストについては、『Oracle Tuxedo ATMI C言語関数リファレンス』のC言語アプリケーション・トランザクション・モニター・インタフェースに関する項を参照してください。

次のリストは、tpinit()およびtpterm()関数の使用方法を示しています。このサンプル・コードは、Oracle Tuxedoソフトウェアに提供されている銀行業務のサンプル・アプリケーションbankappから引用したものです。

アプリケーションへの参加と分離のリスト

#include <stdio.h>             /* UNIX */
#include <string.h>            /* UNIX */
#include <fml.h>               /* ORACLE Tuxedo System */
#include <atmi.h>              /* ORACLE Tuxedo System */
#include <Uunix.h>             /* ORACLE Tuxedo System */
#include <userlog.h>           /* ORACLE Tuxedo System */
#include "bank.h"              /* BANKING #defines */
#include "aud.h"               /* BANKING view defines */

...

main(argc, argv)
int argc;
char *argv[];

{

    ...
    if (strrchr(argv[0],'/') != NULL)    
    proc_name = strrchr(argv[0],'/')+1;
    else
    proc_name = argv[0];
    ...
    /* Join application */
    if (tpinit((TPINIT *) NULL) == -1) {
    (void)userlog("%s: failed to join application\n", proc_name);
      exit(1);
}
...
/* Leave application */
if (tpterm() == -1) {
  (void)userlog("%s: failed to leave application\n", proc_name);
    exit(1);
    }
}

この例は、tpinit()を呼び出すことによって、アプリケーションに参加しているクライアント・プロセスを示しています。エラー(戻り値が–1)が発生すると、このプロセスはCプログラム文のprintf()と似た引数を取るuserlog()を呼び出して、中央イベント・ログにメッセージを書き込みます。詳細は、『Oracle Tuxedo ATMI C関数リファレンス』userlog(3c)に関する項を参照してください。

同様に、tpterm()を呼び出し、エラーが発生すると、このプロセスは中央イベント・ログにメッセージを書き込みます。