BEA Logo BEA Tuxedo Release 8.0

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

 

   Tuxedo ホーム   |   サンプルを使用した BEA Tuxedo アプリケーションの開発方法   |   先頭へ   |   前へ   |   次へ   |   目次

 


bankapp クライアントの検証

bankclt.c ファイルとは

bankclt ファイルには、bankapp アプリケーションから BEA Tuxedo サービスを要求するクライアント・プログラムが定義されています。このクライアント・プログラムはテキスト形式で、次のオプションが提供されています。

アプリケーションの終了を除く各オプションでは、次のタスクを実行するサブルーチンが呼び出されます。

  1. get_account()get_amount()get_socsec()get_phone()、および get_val() 関数を使用して、ユーザによるキーボードからの入力を取得します。

  2. グローバル FML バッファ (*fbfr) に値を追加します。関数によっては、ほかの フィールドを追加する場合もあります。これは、サーバで必要となる情報によっ て異なります。

  3. do_tpcall() 関数を使用して BEA Tuxedo システムに要求を送信するルーチン が、必要なサービスを呼び出せるようにします。次の表は、関数とその関数に よって呼び出されるサービスを示しています。

    関数によって呼び出されるサービス

    関数名

    FML 入力フィールド

    FML 出力フィールド

    サービス名

    BALANCE()

    ACCOUNT_ID

    SBALANCE

    INQUIRY

    WITHDRAWAL()

    ACCOUNT_ID
    SAMOUNT

    SBALANCE

    WITHDRAWAL

    DEPOSIT()

    ACCOUNT_ID
    SAMOUNT

    SBALANCE

    DEPOSIT

    TRANSFER()

    ACCOUNT_ID (0)1
    ACCOUNT_ID (1)
    SAMOUNT

    SBALANCE (0)
    SBALANCE (1)

    TRANSFER

    OPEN_ACCT()

    LAST_NAME
    FIRST_NAME
    MID_INIT
    SSN
    ADDRESS
    PHONE
    ACCT_TYPE
    BRANCH_ID
    SAMOUNT

    ACCOUNT_ID
    SBALANCE

    OPEN_ACCT

    CLOSE_ACCT()

    ACCOUNT_ID

    SBALANCE

    CLOSE_ACCT


     

    1かっこ内の数値は、そのフィールドでの FML オカレンスの数です。

  4. 処理が正常に完了すると、各関数は返された FML バッファから必要なフィール ドを取得し、その結果を出力します。

以下は、do_tpcall() 関数 (bankclt.c の 447 行目以降) のコード例です。

bankclt.c での do_tpcall() 関数のコード例

/*
* この関数は Tuxedo への tpcall を実行します。
*/
static int
do_tpcall(char *service)
{

long len;
char *server_status;
/* グローバル・トランザクションの開始 */
if (tpbegin(30, 0) == -1) {
(void)fprintf(stderr, "ERROR:tpbegin failed (%s)\n",
tpstrerror(tperrno)) ;
return(-1);
}
/* ユーザ・データを使用したサービスの要求 */
if (tpcall(service, (char *)fbfr, 0, (char **)&fbfr, &len,
0) == -1) {
if(tperrno== TPESVCFAIL && fbfr != NULL &&
(server_status=Ffind(fbfr,STATLIN,0,0)) != 0) {
/* サーバの返信が失敗 */
(void)fprintf(stderr, "%s returns failure
(%s)\n",
service,server_status);
}
else {
(void)fprintf(stderr,
"ERROR:%s failed (%s)\n", service,
tpstrerror(tperrno)) ;
}
/* トランザクションのアボート */
(void) tpabort(0);
return(-1);
}
/* トランザクションのコミット */
if(tpcommit(0) < 0) {
(void)fprintf(stderr, "ERROR:tpcommit failed
(%s)\n",
tpstrerror(tperrno)) ;
return(-1);
}
return(0);
}

do_tpcall() 関数は、次のタスクを実行します。

注記 unsolfcn() 関数は、クライアントへの任意通知型メッセージがある場合に呼び出されます。この関数では、STRING 型バッファだけを使用でき、メッセージが出力されます。

bankapp での ud(1) の使い方

bankapp では、BEA Tuxedo プログラム ud(1) が使用されます。ud(1) は、標準入力からフィールド化バッファを読み取り、それをサービスに送信します。サンプル・アプリケーションでは、ud は populate および driver プログラムで使用されています。

要求/応答クライアント audit.c

audit は、ABALTBALABAL_BID、および TBAL_BID サービスを使用して、銀行単位または支店単位で残高照会を行う要求/応答型のクライアント・プログラムです。このプログラムは、次の 2 とおりの方法で実行できます。

audit のソース・コードは、 main() および sum_bal() サブルーチンから構成されます。BEA Tuxedo の ATMI 関数は、この両方で使用されます。このプログラムでは、VIEW 型付きバッファと aud.h ヘッダ・ファイルで定義された構造体が使用されます。構造体のソース・コードは、VIEW 記述ファイル aud.v に記述されています。

次の疑似コードは、このプログラムのアルゴリズムを示しています。

audit の疑似コード

main()
{
Parse command-line options with getopt();
Join application with tpinit();
Begin global transaction with tpbegin();
If (branch_ID specified) {
Allocate buffer for service requests with tpalloc();
Place branch_ID into the aud structure;
Do tpcall() to "ABAL_BID" or "TBAL_BID";
Print balance for branch_ID;
Free buffer with tpfree();
}
else /* branch_ID が指定されていない場合*/
call subroutine sum_bal();
Commit global transaction with tpcommit();
Leave application with tpterm();
}
sum_bal()
}
Allocate buffer for service requests with tpalloc();
For (each of several representative branch_ID's,
one for each site)
Do tpacall() to "ABAL" or "TBAL";
For (each representative branch_ID) {
Do tpgetrply() wtith TPGETANY flag set
to retrieve replies;
Add balance to total;
Print total balance;
}
Free buffer with tpfree();
}

以下は、audit ソース・コードの構成要素である main() および sum_bal() で行われる処理をまとめたものです。

main() 関数では、次の処理が行われます。

  1. /* アプリケーションへの参加 */

  2. /* グローバル・トランザクションの開始 */

  3. /* バッファの作成、およびデータ・ポインタの設定 */

  4. /* tpcall の実行 */

  5. /* グローバル・トランザクションのコミット */

  6. /* アプリケーションからの分離 */

sum_bal サブルーチンでは、次の処理が行われます。

  1. /* バッファの作成、およびデータ・ポインタの設定 */

  2. /* tpacall の実行 */

  3. /* tpgetrply を使用した応答の検索 */

会話型のクライアント auditcon.c

auditcon は、audit プログラムの会話型バージョンです。 auditcon のソース・コードでは、会話型通信のための ATMI 関数が使用されます。たとえば、クライアントとサーバ間の接続を確立する tpconnect()、メッセージを送信する tpsend()、メッセージを受信する tprecv() が使用されます。

次の疑似コードは、このプログラムのアルゴリズムを示しています。

auditcon の疑似コード

main()
{
        Join the application
Begin a transaction
Open a connection to conversational service AUDITC
Do until user says to quit: {
Query user for input
Send service request
Receive response
Print response on user's terminal
Prompt for further input
}
        Commit transaction
Leave the application
}

イベントを監視するクライアント bankmgr.c

bankmgr は、bankapp の継続的に稼働するクライアントです。このプログラムは、新規口座の開設や 10,000 ドル以上の引き出しなど、アプリケーション定義のイベントで特に関心のあるものをサブスクライブします。bankmgr.c クライアントの詳細については、bankappREADME2 ファイル、または bankmgr.c コードを参照してください。

関連項目

 

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