![]() |
![]() |
|
|
bankapp クライアントの検証
bankclt.c ファイルとは
bankclt ファイルには、bankapp アプリケーションから BEA Tuxedo サービスを要求するクライアント・プログラムが定義されています。このクライアント・プログラムはテキスト形式で、次のオプションが提供されています。
アプリケーションの終了を除く各オプションでは、次のタスクを実行するサブルーチンが呼び出されます。
関数によって呼び出されるサービス
1かっこ内の数値は、そのフィールドでの 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 は、ABAL、TBAL、ABAL_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() 関数では、次の処理が行われます。
sum_bal サブルーチンでは、次の処理が行われます。
会話型のクライアント 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 クライアントの詳細については、bankapp の README2 ファイル、または bankmgr.c コードを参照してください。
関連項目
![]() |
![]() |
![]() |
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|