bea ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > Tuxedo > サンプルを使用した Tuxedo アプリケーションの開発方法 > bankapp (複雑な C 言語アプリケーション) のチュートリアル |
サンプルを使用した Tuxedo アプリケーションの開発方法
|
bankapp (複雑な C 言語アプリケーション) のチュートリアル
ここでは、次の内容について説明します。
bankapp とは
bankapp は、BEA Tuxedo ソフトウェアに同梱されている、銀行業務の ATMI サンプル・アプリケーションです。このアプリケーションでは、口座の開設と解約、残高照会、預け入れまたは引き出し、口座振り替えなどの銀行業務を行うことができます。
このチュートリアルについて
このチュートリアルでは、bankapp アプリケーションを開発して実行するための手順を順に示します。このチュートリアルで bankapp の「開発」を経験すると、独自のアプリケーションを開発できるようになります。
bankapp チュートリアルは、次の 3 つの節から構成されています。
注記 ここで説明する内容は、アプリケーションの開発、管理、プログラミングに経験のある UNIX および Windows 2000 システムのユーザを対象としています。また、BEA Tuxedo ソフトウェアについて理解していることを前提としています。
bankapp について
このサンプル・アプリケーションの手順は、UNIX または Windows 2000 環境で動作するシェル・スクリプト RUNME.sh と RUNME.cmd によって自動化されています。対応する readme ファイルに、これらのファイルの実行方法が説明されています。これらのファイルに目をとおし実行の手順を十分に理解した上で、ここで説明する内容に従って操作をすれば、分散アプリケーションの設定と管理をよりスムーズに行うことができます。
bankapp サンプル・アプリケーションでは、ソフトウェアに同梱のデモ版リレーショナル・データベースが使用されています。サンプル・アプリケーションに用意されたデモ用の各種コマンドと SQL コードを使用して、データベースにアクセスします。
このマニュアルでは、bankapp アプリケーションを構成するファイル、クライアント、およびサービスについて説明します。各作業をクリックすると、その作業を行う手順が表示されます。
bankapp について
bankapp アプリケーションを構成するファイルは、bankapp ディレクトリに置かれています。このディレクトリは、次の図のように構成されています。
銀行業務アプリケーションのファイルについて bankapp ディレクトリには、次のファイルが置かれています。
次の表は、銀行業務アプリケーションを構成するファイルを示しています。BEA Tuxedo ソフトウェアに同梱のソース・ファイル、bankapp.mk の実行時に生成されるファイル、および各ファイルの簡単な説明がまとめられています。
表 3-1 銀行業務アプリケーションを構成するファイル
関連項目
bankapp クライアントの検証
bankclt.c ファイルとは
bankclt ファイルには、bankapp アプリケーションから BEA Tuxedo サービスを要求するクライアント・プログラムが定義されています。このクライアント・プログラムはテキスト形式で、次のオプションが提供されています。
アプリケーションの終了を除く各オプションでは、次のタスクを実行するサブルーチンが呼び出されます。
表 3-2 関数によって呼び出されるサービス
1かっこ内の数値は、そのフィールドでの FML オカレンスの数です。
以下は、do_tpcall() 関数 (bankclt.c の 447 行目以降) のコード例です。
コード リスト3-1 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);
}
/* Request the service with the user data */
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 に記述されています。
次の擬似コードは、このプログラムのアルゴリズムを示しています。
コード リスト3-2 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() が使用されます。
次の擬似コードは、このプログラムのアルゴリズムを示しています。
コード リスト3-3 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 コードを参照してください。
関連項目
bankapp サーバと bankapp サービスの検証
ここでは、次の内容について説明します。
サーバとは、1 つ以上のサービスを提供する実行可能プロセスです。BEA Tuxedo システムでは、サーバはクライアントとして動作するプロセスから継続的に要求を受け取り、それを適切なサービスに転送します。サービスとは、アプリケーションの処理を行うために記述された C 言語のサブルーチンです。BEA Tuxedo アプリケーションは、サービスを提供し、リソース・マネージャにアクセスできるように作成されています。サービス・ルーチンは、BEA Tuxedo アプリケーション・プログラマが作成します。
データベースと直接やり取りは行わない TRANSFER サービスを除くすべての bankapp サービスのコードは、C 言語に埋め込み型 SQL 文が使用されています。TRANSFER サービスは、XFER サーバによって実行される C 言語プログラムです。つまり、ソース・ファイルは .ec ファイルではなく .c ファイルです。
bankapp のすべての bankapp サービスでは、ATMI で提供される関数を使用して、次の処理が行われます。
bankapp の要求/応答型サーバ
bankapp の 5 つのサーバは、応答/要求モードで動作します。このうちの 4 つは、埋め込み型 SQL 文を使用して、リソース・マネージャにアクセスします。これらのサーバのソース・ファイル (bankapp サンプル・アプリケーションのサブディレクトリにあります) には、ファイル名に拡張子として .ec が付いています。
5 番目のサーバ XFER は振り替えに使用されるサーバで、リソース・マネージャ自体への呼び出しは行いません。このサーバは、TLR サーバによって提供される WITHDRAWAL サービスおよび DEPOSIT サービスを呼び出し、口座間の振り替えを行います。XFER では、リソース・ネージャへの呼び出しは行われず、埋め込み型 SQL 文が使用されていないので、XFER のソース・ファイルは .c ファイルです。
bankapp 会話型サーバ AUDITC は、会話型サーバの一例です。このサーバでは、AUDITC と呼ばれるサービスが提供されます。会話型クライアント auditcon は、AUDITC への接続を確立し、そこに監査情報を要求します。 AUDITC は要求を評価し、必要な情報を得るために適切なサービス (ABAL、TBAL、ABAL_BID、またはTBAL_BID) を呼び出します。呼び出されたサービスから応答を受信すると、AUDITC はその応答を auditcon.に返します。会話型サーバのサービスは、要求/応答サービスを呼び出すことができます。別の会話型サーバとの接続を確立することもできますが、この機能は AUDITC では提供されていません。 bankapp サービス bankapp では、12 種類の要求/応答サービスが提供されます。bankapp の各サービス名は、サーバのソース・コード内にある C 言語の関数名と一致します。
bankapp サービスのアルゴリズム 次の擬似コードは、bankapp の各サービスで使用されるアルゴリズムを示しています。サービスには BR_ADD、TLR_ADD、OPEN_ACCT、CLOSE_ACCT、WITHDRAWAL、DEPOSIT、INQUIRY、 TRANSFER、ABAL、TBAL、ABAL_BID、および TBAL_BID があります。このコード例を参考にすると、bankapp サーバのソース・コードを理解しやすくなります。 コード リスト3-4 BR_ADD の擬似コード コード リスト3-5 TLR_ADD の擬似コード コード リスト3-6 OPEN_ACCT の擬似コード コード リスト3-7 CLOSE_ACCT の擬似コード コード リスト3-8 WITHDRAWAL の擬似コード コード リスト3-9 DEPOSIT の擬似コード コード リスト3-10 INQUIRY の擬似コード コード リスト3-11 TRANSFER の擬似コード コード リスト3-12 ABAL の擬似コード コード リスト3-13 TBAL の擬似コード コード リスト3-14 ABAL_BID の擬似コード コード リスト3-15 TBAL_BID の擬似コード サーバに組み込みのユーティリティ bankapp のソース・ファイルには、appinit.c と util.c という 2 つの C 言語サブルーチン・ファイルがあります。
void BR_ADD (TPSVCINFO *transb)
{
TPSVCINFO データ・バッファへのポインタを設定;
フィールド化バッファからサービス要求に関連するすべての値を取得;
BRANCH にレコードを挿入;
tpreturn() で成功を示す値を返す;
} void TLR_ADD (TPSVCINFO *transb)
{
TPSVCINFO データ・バッファへのポインタを設定;
フィールド化バッファからサービス要求に関連するすべての値を取得;
支店の LAST_ACCT を読み取り TELLER_ID を取得;
窓口レコードの挿入;
LAST_TELLER で BRANCH を更新;
tpreturn() で成功を示す値を返す;
} void OPEN_ACCT(TPSVCINFO *transb)
{
Fget() および Fvall() で、フィールド化バッファからサービス要求に関連する
すべての値を取得;
預け入れ金額が正の値であるか確認し、正でない場合は tpreturn() で
エラーを示す値を返す;
口座番号が妥当であるか確認し、妥当でなければ tpreturn() で
エラーを示す値を返す;
トランザクション整合性レベルを、読み取り/書き込みに設定;
支店の LAST_ACCT フィールドに基づき、BRANCH レコードを検索し、新たな
口座番号を選択;
ACCOUNT ファイルに新たな口座レコードを挿入;
LAST_ACCT で BRANCH レコードを更新;
tpalloc() で預け入れ要求バッファを割り当て、Finit() で初期化し
FML タイプとして使用;
DEPOSIT サービス要求への値を預け入れバッファに格納;
サービスからの呼び出しにより DEPOSIT 要求の優先順位を上げる;
tpcall() で DEPOSIT サービスを呼び出し、初期残高を加算;
必要な情報を含む応答バッファを用意;
tpfree()で預け入れ要求バッファを解放;
tpreturn() で成功を示す値を返す;
} void CLOSE_ACCT(TPSVCINFO *transb)
{
Fvall() でフィールド化バッファから口座番号を取得;
口座番号が妥当であるか確認し、妥当でなければ tpreturn() で
エラーを示す値を返す;
トランザクション整合性レベルを、読み取り/書き込みに設定;
最終的な引き出し金額の確認のため、ACCOUNT レコードを検索;
tpalloc() を使用して引き出し要求バッファを割り当て、Finit() で初期化し
再度初期化;
WITHDRAWAL サービス要求への値を引き出しバッファに格納;
サービスからの呼び出しにより DEPOSIT 要求の
優先順位を上げる;
tpcall() で WITHDRAWAL サービスを呼び出し、口座残高を引き出す;
ACCOUNT レコードを削除;
必要な情報を含む応答バッファを用意;
tpfree() で引き出し要求バッファを解放;
tpreturn() で、成功を示す値を返す;
} void WITHDRAWAL(TPSVCINFO *transb)
{
Fvall() および Fget() で、フィールド化バッファから口座番号と金額を取得;
口座番号が妥当であるか確認し、妥当でなければ tpreturn() でエラーを示す値を返す;
引き出し金額が正の値であるか確認し、正でなければ tpreturn() で
エラーを示す値を返す;
トランザクション整合性レベルを、読み取り/書き込みに設定;
口座残高を取得するため、 ACCOUNT レコードを検索;
引き出し金額が ACCOUNT で示される残高を超えないか確認;
窓口残高と支店番号を取得するため、TELLER レコードを検索;
引き出し金額が TELLER の残高を超えないか確認;
支店残高を取得するため、BRANCH レコードを検索;
引き出し金額が BRANCH の残高を超えないか確認;
引き出し金額を差し引き、新たな口座残高を決定;
新たな口座残高で ACCOUNT レコードを更新;
引き出し金額を差し引き、新たな窓口残高を決定;
新たな窓口残高で TELLER レコードを更新;
引き出し金額を差し引き、新たな支店残高を決定;
支店残高で BRANCH レコードを更新;
トランザクション情報と共に、新たな HISTORY レコードを挿入;
必要な情報を含む応答バッファを用意;
tpreturn() で、成功を示す値を返す;
} void DEPOSIT(TPSVCINFO *transb)
{
Fvall() および Fget() で、フィールド化バッファから口座番号と金額を取得;
口座番号が妥当であるか確認し、妥当でなければ tpreturn() でエラーを示す値を返す;
預け入れ金額が正の値であるか確認し、正でなければ tpreturn() で
エラーを示す値を返す;
トランザクション整合性レベルを、読み取り/書き込みに設定;
口座残高を取得するため、 ACCOUNT レコードを検索;
窓口残高と支店番号を取得するため、TELLER レコードを検索;
支店残高を取得するため、BRANCH レコードを検索;
預け入れ金額を加算し、新たな口座残高を決定;
新たな口座残高で ACCOUNT レコードを更新;
預け入れ金額を加算し、新たな窓口残高を決定;
新たな窓口残高で TELLER レコードを更新;
預け入れ金額を加算し、新たな支店残高を決定;
支店残高で BRANCH レコードを更新;
トランザクション情報と共に、新たな HISTORY レコードを挿入;
必要な情報を含む応答バッファを用意;
tpreturn() で成功を示す値を返す;
} void INQUIRY(TPSVCINFO *transb)
{
Fvall() でフィールド化バッファから口座番号を取得;
口座番号が妥当であるか確認し、妥当でなければ tpreturn() でエラーを示す値を返す;
トランザクション整合性レベルを、読み取りのみに設定;
口座残高を取得するため、 ACCOUNT レコードを検索;
必要な情報を含む応答バッファを用意;
tpreturn() で成功を示す値を返す;
} void TRANSFER(TPSVCINFO *transb)
{
Fvall() および Fget() で、フィールド化バッファから、口座番号と
金額を取得;
口座番号が両方とも妥当であるか確認し、妥当でない場合は、tpreturn() で
エラーを示す値を返す;
振り替え金額が正の値であるか確認し、正でない場合は tpreturn() で
エラーを示す値を返す;
tpalloc() を使用して引き出し要求バッファを割り当て、
Finit() で初期化し
FML タイプとして使用;
WITHDRAWAL サービス要求への値を引き出し要求バッファに格納;
サービスからの呼び出しにより DEPOSIT 要求の
優先順位を上げる;
tpcall() で WITHDRAWAL サービスを呼び出す;
応答要求バッファから情報を取得;
預け入れ要求バッファとして使用するため、引き出し要求バッファを Finit() により
再度初期化;
DEPOSIT サービス要求への値を預け入れ要求のバッファに格納;
DEPOSIT 要求の優先順位を上げる;
tpcall() で DEPOSIT サービスを呼び出す;
必要な情報を含む応答バッファを用意;
tpfree() で引き出し/預け入れ要求バッファの解放;
tpreturn() で成功を示す値を返す;
} void ABAL(TPSVCINFO *transb)
{
トランザクション整合性レベルを、読み取りのみに設定;
ABAL サーバ・グループのデータベースで、 ACCOUNT ファイルの
すべての BALANCE 値の合計を検索
(単一の ESQL 文で十分);
合計を応答バッファ・データ構造体へ格納;
tpreturn() で成功を示す値を返す;
} void TBAL(TPSVCINFO *transb)
{
トランザクション整合性レベルを、読み取りのみに設定;
TBAL サーバ・グループのデータベースで、 TELLER ファイルの
すべての BALANCE 値の合計を検索
(単一の ESQL 文で十分);
合計を応答バッファ・データ構造体へ格納;
tpreturn() で成功を示す値を返す;
} void ABAL_BID(TPSVCINFO *transb)
{
トランザクション整合性レベルを、読み取りのみに設定;
transb バッファに基づき、branch_id を設定;
BRANCH_ID = branch_id に該当するレコードの中で、ACCOUNT ファイルの
すべての BALANCE 値の合計を検索
(単一の ESQL 文で十分);
合計を応答バッファ・データ構造体へ格納;
tpreturn() で成功を示す値を返す;
} void TBAL_BID(TPSVCINFO *transb)
{
トランザクション整合性レベルを、読み取りのみに設定;
transb バッファに基づき、branch_id を設定;
BRANCH_ID = branch_ID に該当するレコードの中で、TELLER ファイルの
すべての BALANCE 値の合計を検索
(単一の ESQL 文で十分);
合計を応答バッファ・データ構造体へ格納;
tpreturn() で成功を示す値を返す;
}
サービスをコーディングする別の方法
bankapp のソース・ファイルでは、すべてのサービスがサーバのソース・コードとして参照されるファイルに組み込まれています。これらのファイルは bankapp サーバと名前が同じですが、main() 関数が含まれていないので実際にはサーバではありません。標準 main() は、buildserver コマンドの実行時に BEA Tuxedo ATMI によって提供されます。
BEA Tuxedo システム・アプリケーションを作成する別の方法として、各サービス・サブルーチンを別のファイルに記述する方法があります。この方法を使用して、TLR サーバを作成するとします。TLR.ec ファイルには 3 つのサービスが定義されています。次の手順に従って、これらのサービスを INQUIRY.ec、WITHDRAW.ec、および DEPOSIT.ec の 3 つの .ec ファイルに分けます。
buildserver -r TUXEDO/SQL ¥
-s DEPOSIT -s WITHDRAWAL -s INQUIRY ¥
-o TLR ¥
-f DEPOSIT.o -f WITHDRAW.o -f INQUIRY.o ¥
-f util.o -f -lm
この例に示したように、すべてのサービス関数を 1 つのソース・ファイルに記述する必要はありません。つまり、サーバはソース・プログラム・ファイルとして存在する必要はありません。サーバは、各種のソース・ファイルを使用して、buildserver コマンド行に指定されたファイルに基づいて 1 つの実行可能サーバとしてビルドできます。この方法により、サーバを柔軟にビルドできるようになります。
関連項目
bankapp のファイルおよびリソースの準備
ここでは、bankapp の実行に必要なファイルとリソースを作成するための手順を順に示します。
各作業をクリックすると、その作業を行う手順が表示されます。
ステップ 1: 環境変数の設定
環境変数は、bankvar ファイルに定義されています。このファイルは数多くのコメントが記述された大きな (約 185 行から構成される) ファイルです。
. ./bankvar
コード リスト3-16 bankvar:bankapp の環境変数
# Copyright (c) 1997, 1996 BEA Systems, Inc.
# Copyright (c) 1995, 1994 Novell, Inc.
# Copyright (c) 1993, 1992, 1991, 1990 Unix System Laboratories, Inc.
# All rights reserved
#
# このファイルには、bankapp を実行するために
# Tuxedo システムで必要なすべての環境変数が設定されています。
#
# このディレクトリには、すべての Tuxedo ソフトウェアが置かれています。
# システム管理者はこの変数を設定する必要があります。
#
if [ -z "${TUXDIR}" ] ; then
if [ ! -z "${ROOTDIR}" ] ; then
TUXDIR=$ROOTDIR
export TUXDIR
fi
fi
TUXDIR=${TUXDIR:?}
#
# 必要に応じて LANG を設定し直します。
#
if [ ! -d ${TUXDIR}/locale/C -a -d ${TUXDIR}/locale/english_us ] ; then
export LANG
LANG=english_us.ascii
fi
#
# このディレクトリには、ユーザ作成の全コードが置かれています。
#
# アプリケーション・ジェネレータによって生成されたファイルが
# 置かれるディレクトリの絶対パス名です。
#
APPDIR=${TUXDIR}/apps/bankapp
#
# SVR4 など特定の環境での実行時に
# 動的にリンクされる共用オブジェクトのパスです。
#
LD_LIBRARY_PATH=${TUXDIR}/lib:${LD_LIBRARY_PATH}
#
# HP-UX の場合に、共用オブジェクトのパスを設定します。
#
SHLIB_PATH=${TUXDIR}/lib:${SHLIB_PATH}
#
# AIX の場合に、共用オブジェクトのパスを設定します。
#
LIBPATH=${TUXDIR}/lib:/usr/lib:${LIBPATH}
#
# 論理ブロック・サイズです。データベース管理者はこの変数を設定する必要があります。
#
BLKSIZE=512
#
# データベース・ユーティリティおよびデータベース作成スクリプトで使用する
# データベースのデフォルト名を設定します。
#
DBNAME=bankdb
#
# データベースを共用モードで開くか、またはプライベート・モードで開くかを指定します。
#
DBPRIVATE=no
#
# データベースの IPC キーを設定します。これは、UBBCONFIG の IPC とは異なる値を指定する必要があります。
# *RESOURCES IPCKEY パラメータ
#
DIPCKEY=80953
#
# tmloadcf で使用される環境ファイルです。
#
ENVFILE=${APPDIR}/ENVFILE
#
# mc、viewc、tmloadcf などで使用されるフィールド・テーブル・ファイルのリストです。
#
FIELDTBLS=Usysflds,bankflds,creditflds,eventflds
#
FIELDTBLS32=Usysfl32,evt_mib,tpadm
#
# フィールド・テーブル・ファイルを検索するディレクトリのリストです。
#
FLDTBLDIR=${TUXDIR}/udataobj:${APPDIR}
#
FLDTBLDIR32=${TUXDIR}/udataobj:${APPDIR}
#
# データベースの汎用デバイス・リストです。
#
FSCONFIG=${APPDIR}/bankdl1
#
# MENU スクリプトで使用されるネットワーク・アドレスです。
#
NADDR=
#
# ネットワーク・デバイス名です。
#
NDEVICE=
#
# MENU スクリプトで使用されるネットワーク・リスナ・アドレスです。
#
NLSADDR=
#
# TERM が設定されていることを確認します。
#
TERM=${TERM:?}
#
# トランザクション・ログのデバイスを設定します。これは、
# UBBCBSHM ファイルの *MACHINES セクションにあるこのサイトの LMID の
TLOGDEVICE パラメータと一致する必要があります。
#
TLOGDEVICE=${APPDIR}/TLOG
#
# BEA Tuxedo システムにすべての情報を提供するバイナリ・ファイルのデバイスです。
#
TUXCONFIG=${APPDIR}/tuxconfig
#
# 中央ユーザ・ログを記録するファイルの接頭語を設定します。
# これは、UBBCONFIG ファイルの *MACHINES セクションにある
# このサイトの LMID の ULOGPFX パラメータと一致する必要があります。
#
ULOGPFX=${APPDIR}/ULOG
#
# RUNME.sh で使用されるシステム名です。
#
UNAME=
#
# viewc、tmloadcf などで使用される VIEW ファイルのリストです。
#
VIEWFILES=aud.V
#
VIEWFILES32=mib_views,tmib_views
#
# VIEW ファイルを検索するディレクトリのリストです。
#
VIEWDIR=${TUXDIR}/udataobj:${APPDIR}
#
VIEWDIR32=${TUXDIR}/udataobj:${APPDIR}
#
# Q デバイスを指定します (デモにイベントが含まれている場合)。
#
QMCONFIG=${APPDIR}/qdevice
#
# 設定したすべての変数をエクスポートします。
#
export TUXDIR APPDIR BLKSIZE DBNAME DBPRIVATE DIPCKEY ENVFILE
export LD_LIBRARY_PATH SHLIB_PATH LIBPATH
export FIELDTBLS FLDTBLDIR FSCONFIG MASKPATH OKXACTS TERM
export FIELDTBLS32 FLDTBLDIR32
export TLOGDEVICE TUXCONFIG ULOGPFX
export VIEWDIR VIEWFILES
export VIEWDIR32 VIEWFILES32
export QMCONFIG
#
# 設定されていない場合は、TUXDIR/bin を PATH に追加します。
#
a="`echo $PATH | grep ${TUXDIR}/bin`"
if [ x"$a" = x ]
then
PATH=${TUXDIR}/bin:${PATH}
export PATH
fi
#
# 設定されていない場合は、APPDIR を PATH に追加します。
#
a="`echo $PATH | grep ${APPDIR}`"
if [ x"$a" = x ]
then
PATH=${PATH}:${APPDIR}
export PATH
fi
#
# ほかのマシン・タイプの bin ディレクトリを確認します。
#
for DIR in /usr/5bin /usr/ccs/bin /opt/SUNWspro/bin
do
if [ -d ${DIR} ] ; then
PATH="${DIR}:${PATH}"
fi
done
注記 Sun Solaris を使用している場合は、シェルとして csh ではなく、/bin/sh を使用します。また、次のように、PATH の先頭に /usr/5bin を指定します。
PATH=/usr/5bin:$PATH;export PATH
関連項目
ステップ 2: bankapp でのサーバのビルド
buildserver(1) コマンドを使用して、BEA Tuxedo システムの ATMI main() 関数で実行可能 ATMI サーバを作成します。このコマンドではオプションを使用して、出力ファイル、アプリケーションで提供される入力ファイル、各種の方法で BEA Tuxedo システム・アプリケーションを実行するためのライブラリを指定します。
buildserver は、cc コマンドを呼び出します。環境変数の CC を設定すると別のコンパイル・コマンドを指定でき、CFLAGS を設定するとコンパイル時と編集時にフラグを設定できます。buildserver コマンドは bankapp.mk で使用され、銀行業務アプリケーションの各サーバをコンパイルしてビルドします。以下に、bankapp の 6 種類のサーバについて説明します。
ACCT サーバのビルド
ACCT サーバは、OPEN_ACCT および CLOSE_ACCT 関数のコードが記述された ACCT.ec ファイルから生成されます。このサーバをビルドするには、ACCT.ec をコンパイルして ACCT.o ファイルを生成し、それを buildserver コマンドに渡します。この方法では、コンパイル・エラーを特定でき、サーバをビルドする前に修正することができます。
以下は、buildserver コマンド行で指定されている各オプションの説明です。
以下に、ACCT サーバを作成するために、buildserver コマンド行に指定されたオプションで行われる操作を簡単にまとめます。
注記 appinit.c ファイルには、システムによって提供される tpsvrinit() および tpsvrdone() 関数が含まれています。これらのルーチンの使用方法については、tpservice(3c) のリファレンス・ページを参照してください。
BAL サーバのビルド
BAL サーバは、 ABAL、TBAL、ABAL_BID、および TBAL_BID 関数のコードが記述された BAL.ec ファイルから生成されます。ACCT.ec ファイルと同様に、BAL.ec をコンパイルして BAL.o ファイルを生成し、それを buildserver コマンドに渡します。そのため、コンパイル・エラーを特定でき、サーバをビルドする前に修正することができます。
buildserver -r TUXEDO/SQL ¥
-s ABAL -s TBAL -s ABAL_BID -s TBAL_BID¥
-o BAL ¥
-f BAL.o -f appinit.o
BTADD サーバのビルド
BTADD サーバは、BR_ADD および TLR_ADD 関数のコードが記述された BTADD.ec ファイルから生成されます。BTADD.ec をコンパイルして BTADD.o ファイルを生成し、それを buildserver コマンドに渡します。
buildserver -r TUXEDO/SQL ¥
-s BR_ADD -s TLR_ADD ¥
-o BTADD ¥
-f BTADD.o -f appinit.o
TLR サーバのビルド
TLR サーバは、DEPOSIT、WITHDRAWAL、および INQUIRY 関数のコードが記述された TLR.ec ファイルから生成されます。TLR.ec をコンパイルして TLR.o ファイルを生成し、それを buildserver コマンドに渡します。
buildserver -r TUXEDO/SQL ¥
-s DEPOSIT -s WITHDRAWAL -s INQUIRY ¥
-o TLR ¥
-f TLR.o -f util.o -f -lm
コンパイル時に使用できるオプションについては、『UNIX System V User's Reference Manual』の cc(1) を参照してください。
XFER サーバのビルド
XFER サーバは、TRANSFER 関数のコードが記述された XFER.c ファイルから生成されます。XFER.c をコンパイルして XFER.o ファイルを生成し、それを buildserver コマンドに渡します。
buildserver -r TUXEDO/SQL ¥
-s TRANSFER ¥
-o XFER ¥
-f XFER.o -f appinit.o
bankapp.mk ファイルでビルドされるサーバ
bankapp サーバをビルドする場合、buildserver コマンドの指定方法を理解していることが大切です。ただし、実際にビルドする場合、makefile にビルドの定義を記述することがよくあります。bankapp でもその方法が採用されています。
ステップ 3: bankapp Makefile の編集
bankapp には、すべてのスクリプトを実行可能にし、VIEW 記述ファイルをバイナリ形式に変換し、アプリケーション・サーバの作成に必要なすべてのプリコンパイル、コンパイル、およびビルドを行う makefile が提供されています。また、最初からやり直す場合にもこのファイルを利用できます。
提供されている bankapp.mk をそのまま使わずにフィールドを編集した方がよい場合があります。また、説明が必要なフィールドもあります。以下にそれらのフィールドについて説明します。
TUXDIR パラメータの編集
#
# Tuxedo システムのルート・ディレクトリです。このファイルは、編集してこの値を正しく設定するか、
# または "make -f STOCKAPP.mk TUXDIR=/correct/rootdir" を使用して正しい値を渡します。
# そのようにしないと、bankapp のビルドは失敗します。
#
TUXDIR=../..
APPDIR パラメータの編集
#
# bankapp アプリケーションのソース・コードと実行可能ファイルが置かれたディレクトリです。
# このファイルは、編集してこの値を正しく設定するか、
# または "make -f bankapp.mk APPDIR=/correct/appdir" を使用して正しい値を渡します。
# そのようにしないと、bankapp のビルドは失敗します。
#
APPDIR=$(TUXDIR)/samples/atmi/bankapp
#
リソース・マネージャのパラメータの設定
デフォルトでは、bankapp はデータベース・リソース・マネージャとして BEA Tuxedo/SQL を使用するように設定されています。その場合、ご使用のシステムに BEA Tuxedo システム・データベースがインストールされていることが必要です。インストールされていない場合は、RM パラメータに TUXDIR/udataobj/RM にリストされているリソース・マネージャの名前を設定します。
#
# リソース・マネージャ
#
RM=TUXEDO/SQL
#
注記 BEA Tuxedo SQL リソース・マネージャは、デモ用のプログラムです。
bankapp.mk ファイルの実行
nohup make -f bankapp.mk &
関連項目
ステップ 4: bankapp データベースの作成
ここでは、bankapp とリソース・マネージャ (通常はデータベース管理システム) 間のインターフェイス、および bankapp データベースを作成する方法について説明します。bankapp では、BEA Tuxedo システム・データベース、つまり XA 準拠のリソース・マネージャの BEA Tuxedo/SQL の機能が使用されます。
注記 BEA Tuxedo SQL リソース・マネージャは、デモ用のプログラムです。
bankapp データベースを作成する方法は、単一プロセッサでアプリケーションを起動するか (SHM モード)、複数のプロセッサをネットワーク上で起動するか (MP モード) によって異なります。
SHM モードでのデータベースの作成
. ./bankvar
MP モードでのデータベースの作成
. ./bankvar
関連項目
ステップ 5: XA 準拠のリソース・マネージャの準備
XA 準拠の代替リソース・マネージャで bankapp を実行するには、各種のファイルを変更する必要があります。ここでは、次の内容について説明します。
bankvar ファイルの変更
BLKSIZE=512
DBNAME=bankdb
DBPRIVATE=no
DIPCKEY=80953
FSCONFIG=${APPDIR}/bankdl1
注記 これらの環境変数は、BEA Tuxedo システムだけを対象としています。ほかのデータベース管理システムを使用する場合は、必要に応じてほかの環境変数を設定してください。
bankapp サービスの変更
bankapp では、データベースへのすべてのアクセスは埋め込み型 SQL 文で実行されます。そのため、新しいリソース・マネージャで SQL がサポートされている場合は問題がありません。appinit.c ユーティリティには、tpopen() と tpclose() への呼び出しが定義されています。
bankapp.mk ファイルの変更
$TUXDIR/udataobj/RM
crbank および crbankdb の変更
コード リスト3-17 crbankdb スクリプト
#Copyright (c) BEA Systems, Inc.
#All rights reserved
#
# デバイス・リストを作成します。
#
dbadmin<<!
echo
crdl
# 次の行をデバイス 0 のエントリに置き換えます。
${FSCONFIG} 0 2560
!
#
# データベース・ファイル、フィールド、および二次インデックスを作成します。
#
sql<<!
echo
create database ${DBNAME} with (DEVNAME='${FSCONFIG}',
IPCKEY=${DIPCKEY}, LOGBLOCKING=0, MAXDEV=1,
NBLKTBL=200, NBLOCKS=2048, NBUF=70, NFIELDS=80,
NFILES=20, NFLDNAMES=60, NFREEPART=40, NLCKTBL=200,
NLINKS=80, NPREDS=10, NPROCTBL=20, NSKEYS=20,
NSWAP=50, NTABLES=20, NTRANTBL=20, PERM='0666',
STATISTICS='n'
)
create table BRANCH (
BRANCH_ID integer not null,
BALANCE real,
LAST_ACCT integer,
LAST_TELLER integer,
PHONE char(14),
ADDRESS char(60),
primary key(BRANCH_ID)
) with (
FILETYPE='hash', ICF='PI', FIELDED='FML',
BLOCKLEN=${BLKSIZE}, DBLKS=8, OVBLKS=2
)
!
最初の約 40 行を参照すると、変更が必要な部分と不要な部分を判断できます。コードからわかるように、crbankdb は dbadmin への入力と sql シェルコマンドへの入力から構成されています。最初の here ファイルは、BEA Tuxedo システムのコマンド dbadmin に渡されて、データベースのデバイス・リストが作成されます。
このコマンドは、BEA Tuxedo リソース・マネージャだけで機能します。テーブル・スペースを作成したり、適切な権限を認めるために、ほかのコマンドが必要になる場合があります。
コンフィギュレーション・ファイルの変更
GROUPS セクションで、TMSNAME および OPENINFO パラメータに適切な値 (つまり、リソース・マネージャで認識される値) を指定します。
Windows 2000 プラットフォーム上での bankapp と Oracle 8 (XA 準拠の RM) の統合
TUXDIR :BEA TUXEDO システムのインストール先のルート・ディレクトリ
APPDIR :bankapp ファイルが置かれたアプリケーション・ディレクトリ
ORACLE_HOME :Oracle8 のインストール先のルート・ディレクトリ
ORACLE_SID :Oracle システム ID
BLK_SIZE:論理ブロック・サイズ
DBNAME:データベース・ユーティリティおよびデータベース作成スクリプトによって使用されるデータベースのデフォルト名
DBPRIVATE:データベースを共用モードで開くか、またはプライベート・モードで開くかを指定 (yes または no)
FSCONFIG:データベースの汎用デバイス・リスト
PATH=%TUXDIR%¥bin;%TUXDIR%¥include;%TUXDIR%¥lib;%ORACLE_HOME%¥bin;%PATH%
INCLUDE=%ORACLE_HOME%¥rdbms80¥xa; %ORACLE_HOME%¥pro80¥c¥include;%include%
NLSPATH=%TUXDIR%¥locale¥C
PLATFORM=inwnt40
LIB=%TUXDIR%¥lib; %ORACLE_HOME%¥pro80¥lib¥msvc; %ORACLE_HOME%¥rdbms80¥xa; %lib%;
>bankvar
cd $APPDIR
buildtms -r Oracle_XA -o TMS_ORA
copy nt¥bankapp.mak to %APPDIR%
nmake -f bankapp.mak
USER_ID=0
GROUP_ID=0
UNAME_SITE1=ホスト名で返されるノード名
TUXDIR=bankvar で指定された値
APPDIR=bankvar で指定された値
TMSNAME=TMS_ORA
BANKB1 GRPNO=1 OPENINFO="Oracle_XA:Oracle_XA+Acc=P/user1/PaSsWd1+SesTm=0+LogDir=."
[
Oracle_XA +
required fields:
Acc=P/oracle_user_id/oracle_password +
SesTm=Session_time_limit (maximum time a transaction can be inactive) +
optional fields:
LogDir=logdir (where XA library trace file is located) +
MaxCur=maximum_#_of_open cursors +
SqlNet=connect_string (if Oracle exists over the network)
(eg. SqlNet=hqfin@NEWDB indicates the database with sid=NEWDB accessed at host hqfin by TCP/IP)
]
BANKB2 GRPNO=2
OPENINFO="Oracle_XA:Oracle_XA+Acc=P/user2/PaSsWd2+SesTm=0+LogDir=."
BANKB3 GRPNO=3
OPENINFO="Oracle_XA:Oracle_XA+Acc=P/user3/PaSsWd3+SesTm=0+LogDir=."
tmloadcf -y nt/ubbshm
crtlog -m
tmboot -y
WHENEVER OSERROR EXIT ;
/*システムのユーザのパスワードを取得します。 */
PROMPT
PROMPT
PROMPT -- Some of the operations require "system" user privileges
PROMPT -- Please specify the Oracle "system" user password
PROMPT
ACCEPT syspw CHAR PROMPT 'system passwd:' HIDE ;
CONNECT system/&syspw ;
SHOW user ;
PROMPT
/*デフォルトのデータベースに、「bankapp」で使用する新しいテーブル・スペースを作成します。 */
DROP TABLESPACE bank1
INCLUDING CONTENTS
CASCADE CONSTRAINTS;
PROMPT
PROMPT
PROMPT -- Will create a 3MB tablespace for bankapp ;
PROMPT -------- Please specify full pathname below for Datafile ;
PROMPT -------- Ex: %ORACLE_HOME%/dbs/bankapp.dbf
PROMPT
ACCEPT datafile CHAR PROMPT 'Datafile:' ;
CREATE TABLESPACE bank1
DATAFILE '&datafile' SIZE 3M REUSE
DEFAULT STORAGE (INITIAL 10K NEXT 50K
MINEXTENTS 1 MAXEXTENTS 120
PCTINCREASE 5)
ONLINE;
/***************** 「user1」というユーザを作成します。 ***************/
DROP USER user1 CASCADE;
PROMPT Creating user "user1"
CREATE USER user1 IDENTIFIED by PaSsWd1
DEFAULT TABLESPACE bank1
QUOTA UNLIMITED ON bank1 ;
GRANT CREATE SESSION TO user1 ;
GRANT CREATE TABLE TO user1 ;
CONNECT user1/PaSsWd1 ;
SHOW user ;
PROMPT Creating database objects for user "user1" ;
PROMPT Creating table "branch" ;
CREATE TABLE branch (
branch_id NUMBER NOT NULL PRIMARY KEY,
balance NUMBER,
last_acct NUMBER,
last_teller NUMBER,
phoneCHAR(14),
address CHAR(60)
)
STORAGE (INITIAL 5K NEXT 2K
MINEXTENTS 1 MAXEXTENTS 5 PCTINCREASE 5) ;
PROMPT Creating table "account" ;
CREATE TABLE account (
account_id NUMBER NOT NULL PRIMARY KEY,
branch_id NUMBER NOT NULL,
ssn CHAR(12) NOT NULL,
balance NUMBER,
acct_type CHAR,
last_name CHAR(20),
first_name CHAR(20),
mid_init CHAR,
phoneCHAR(14),
address CHAR(60)
)
STORAGE (INITIAL 50K NEXT 25K
MINEXTENTS 1 MAXEXTENTS 50 PCTINCREASE 5) ;
PROMPT Creating table "teller" ;
CREATE TABLE teller (
teller_id NUMBER NOT NULL PRIMARY KEY,
branch_id NUMBER NOT NULL,
balance NUMBER,
last_name CHAR(20),
first_name CHAR(20),
mid_init CHAR
)
STORAGE (INITIAL 5K NEXT 2K
MINEXTENTS 1 MAXEXTENTS 5 PCTINCREASE 5) ;
PROMPT Creating table "history" ;
CREATE TABLE history (
account_id NUMBER NOT NULL,
teller_id NUMBER NOT NULL,
branch_id NUMBER NOT NULL,
amount NUMBER
)
STORAGE (INITIAL 400K NEXT 200K
MINEXTENTS 1 MAXEXTENTS 5 PCTINCREASE 5) ;
SQL*plus> start $APPDIR/ crbank-ora8.sql
nt¥populate
driver
run
tmshutdown -y
関連項目
ステップ 6: コンフィギュレーション・ファイルの編集
コンフィギュレーション・ファイルには、アプリケーションの実行方法が定義されています。bankapp には、テキスト形式のコンフィギュレーション・ファイル (UBBCONFIG(5) を参照) が 2 つ提供されています。単一のコンピュータ上のアプリケーションを定義する ubbshm と、ネットワーク上のアプリケーションを定義する ubbmp です。
初期化スクリプトは、サンプル・アプリケーションに提供されています。また、ご使用のコンフィギュレーションおよびマシンに合わせて、.sh を使用して 10 個までの完全なコンフィギュレーション・ファイルを生成できます。
コード リスト3-18 ubbmp コンフィギュレーション・ファイル
#Copyright (c) 1999 BEA Systems, Inc.
#All rights reserved
*RESOURCES
IPCKEY 80952
001 UID <id(1) からのユーザ ID>
002 GID <id(1) からのグループ ID>
PERM 0660
MAXACCESSERS 40
MAXSERVERS 35
MAXSERVICES 75
MAXCONV 10
MAXGTT 20
MASTER SITE1,SITE2
SCANUNIT 10
SANITYSCAN 12
BBLQUERY 180
BLOCKTIME 30
DBBLWAIT 6
OPTIONS LAN,MIGRATE
MODEL MP
LDBAL Y
##SECURITY ACL
#
*MACHINES
003 <SITE1 の名前> LMID=SITE1
004 TUXDIR="<TUXDIR>"
005 APPDIR="<APPDIR>"
ENVFILE="<APPDIR>/ENVFILE"
TLOGDEVICE="<APPDIR>/TLOG"
TLOGNAME=TLOG
TUXCONFIG="<APPDIR>/tuxconfig"
006 TYPE="<マシン・タイプ>"
ULOGPFX="<APPDIR>/ULOG"
007 <SITE2 の名前> LMID=SITE2
TUXDIR="<TUXDIR>"
APPDIR="<APPDIR>"
ENVFILE="<APPDIR>/ENVFILE"
TLOGDEVICE="<APPDIR>/TLOG"
TLOGNAME=TLOG
TUXCONFIG="<APPDIR>/tuxconfig"
TYPE="<マシン・タイプ>"
ULOGPFX="<APPDIR>/ULOG"
#
*GROUPS
#
# 認証サーバのグループ
#
Group for Application Queue (/Q) Servers
#
##QGRP1 LMID=SITE1 GRP=102
## TMSNAME=TMS_QM TMSCOUNT=2
## OPENINFO=”TUXEDO/QM:<APPDIR>/qdevice:QSP_BANKAPP”
#
# イベント・ブローカ・サーバのグループ
#
##EVBGRP1 LMID=SITE1 GRPNO=104
DEFAULT: TMSNAME=TMS_SQL TMSCOUNT=2
BANKB1 LMID=SITE1 GRPNO=1
008 OPENINFO="TUXEDO/SQL:<APPDIR>/bankdl1:bankdb:readwrite"
BANKB2 LMID=SITE2 GRPNO=2
OPENINFO="TUXEDO/SQL:<APPDIR>/bankdl2:bankdb:readwrite"
*NETWORK
009 SITE1 NADDR="<SITE1 のネットワーク・アドレス>"
010 NLSADDR="<SITE1 のネットワーク・リスナ・アドレス>"
011 SITE2 NADDR="<SITE2 のネットワーク・アドレス>"
012 NLSADDR="<SITE2 のネットワーク・リスナ・アドレス>"
SECURITY APP_PW
関連項目
ステップ 7 とステップ 8: バイナリ形式のコンフィギュレーション・ファイルとトランザクション・ログ・ファイルの作成
バイナリ形式のコンフィギュレーション・ファイルを作成する前に
バイナリ形式のコンフィギュレーション・ファイルを作成する場合、bankapp ファイルが置かれたディレクトリに移動し、環境変数を設定することが必要です。その場合、次の手順に従います。
注記 SHM モードで bankapp を実行する場合は、tlisten プロセスを作成したり、別のマシンにトランザクション・ログを作成する必要はありません。
コンフィギュレーション・ファイルのロード
コンフィギュレーション・ファイルを編集したら、それを MASTER マシン上にバイナリ・ファイルとしてロードする必要があります。バイナリ形式のコンフィギュレーション・ファイルの名前は TUXCONFIG、そのパス名は TUXCONFIG に定義されています。このファイルは、BEA Tuxedo のシステム管理者の有効なユーザ ID およびグループ ID を持つユーザが作成します。この 2 つの ID は、ご使用のコンフィギュレーション・ファイルの UID および GID の値と同じであることが必要です。同じではない場合、bankapp の実行時にパーミッションの問題が発生します。
tmloadcf ubbmp
TUXCONFIG は、MASTER マシン上だけにインストールできます。アプリケーションの起動時に tmboot によってほかのマシンに複製転送されます。
コンフィギュレーションのオプションとして SECURITY が指定されている場合、tmloadcf の実行時にアプリケーション・パスワードの入力が求められます。30 文字までのパスワードを指定できます。アプリケーションに参加するクライアント・プロセスでは、パスワードを入力する必要があります。
ロードする前に tmloadcf によってテキスト形式のコンフィギュレーション・ファイル (UBBCONFIG) が解析されます。構文エラーが検出された場合、ファイルのロードは失敗します。
トランザクション・ログ (TLOG) ファイルの作成
TLOG は、BEA Tuxedo システムがグローバル・トランザクションを管理するために使用するトランザクション・ログです。アプリケーションを起動する前に、アプリケーションのすべてのマシン上のすべてのファイルに TLOG のエントリが作成されることが必要です。また、ログ自体のファイルは、MASTER マシン上に作成されることが必要です。
bankapp では、デバイス・リストと TLOG を作成する crtlog と呼ばれるスクリプトが提供されています。デバイス・リストは、bankvar の TLOGDEVICE 変数を使用して作成されます。
crtlog -m
XA 準拠ではないリソース・マネージャを使用している場合、トランザクション・ログは不要です。
関連項目
ステップ 9: 各マシン上でのリモート・サービス接続の作成
tlisten はリスナ・プロセスで、BEA Tuxedo アプリケーションのマシン間で tmboot などのプロセスにリモート・サービス接続を提供します。コンフィギュレーション・ファイルの NETWORK セクションで定義されたネットワーク上のすべてのマシンにインストールされていることが必要です。
tlisten の起動については、『BEA Tuxedo システムのインストール』の6-18 ページの「tlisten プロセスの開始」を参照してください。
tlisten で使用されるログ・ファイルは、BEA Tuxedo システムのほかのすべてのログ・ファイルとは別のログ・ファイルです。ただし、複数の tlisten プロセスで 1 つのログ・ファイルを使用できます。デフォルトのファイル名は、TUXDIR/udataobj/tlog です。
リスナ・プロセス (tlisten) の停止
tlisten は、デーモン・プロセスとして実行されます。tlisten を起動スクリプトに組み込んだり、cron ジョブとして実行する方法については、『BEA Tuxedo コマンド・リファレンス』の tlisten(1) を参照してください。
bankapp では、tlisten に対して開始または終了のどちらかの操作しかできません。tlisten を終了するには、次のように SIGTERM シグナルを送信します。
tlisten のエラー・メッセージの例
tlisten がリモートで実行されていない場合、次のように画面上にブート処理に関するメッセージが表示されます。
Booting admin processes
exec DBBL -A :
on MASTER -> process id=17160Started.
exec BBL -A :
on MASTER -> process id=17161Started.
exec BBL -A :
on NONMAST2 -> CMDTUX_CAT:814: cannot propagate TUXCONFIG file
tmboot:WARNING: No BBL available on site NONMAST2.
Will not attempt to boot server processes on that site.
exec BBL -A :
on NONMAST1 -> CMDTUX_CAT:814: cannot propagate TUXCONFIG file
tmboot:WARNING: No BBL available on site NONMAST1.
Will not attempt to boot server processes on that site.
2 processes started.
and messages such as these will be in the ULOG:
133757.mach1!DBBL.17160:LIBTUX_CAT:262: std main starting
133800.mach1!BBL.17161:LIBTUX_CAT:262: std main starting
133804.mach1!BRIDGE.17162:LIBTUX_CAT:262: std main starting
133805.mach1!tmboot.17159:LIBTUX_CAT:278: Could not contact NLS on NONMAST2
133805.mach1!tmboot.17159:LIBTUX_CAT:276: No NLS available for remote
machine NONMAST2
133806.mach1!tmboot.17159:LIBTUX_CAT:276: No NLS available for remote
machine NONMAST2
133806.mach1!tmboot.17159:CMDTUX_CAT:850: Error sending TUXCONFIG
propagation request to TAGENT on NONMAST2
133806.mach1!tmboot.17159:WARNING: No BBL available on site NONMAST2.
Will not attempt to boot server processes on that site.
133806.mach1!tmboot.17159:LIBTUX_CAT:278: Could not contact NLS on NONMAST1
133806.mach1!tmboot.17159:LIBTUX_CAT:276: No NLS available for
remote machine NONMAST1
133806.mach1!tmboot.17159:LIBTUX_CAT:276: No NLS available for
remote machine NONMAST1
133806.mach1!tmboot.17159:CMDTUX_CAT:850: Error sending TUXCONFIG
propagation request to TAGENT on NONMAST1
133806.mach1!tmboot.17159:WARNING: No BBL available on site NONMAST1.
Will not attempt to boot server processes on that site.
If tlisten is started with the wrong machine address, the following messages
appear in the tlisten log.
Mon Aug 26 10:51:56 1991; 14240; BEA TUXEDO System Listener Process Started
Mon Aug 26 10:51:56 1991; 14240; Could not establish listening endpoint
Mon Aug 26 10:51:56 1991; 14240; Terminating listener process, SIGTERM
関連項目
bankapp の起動
ここでは、bankapp を起動し、各種のクライアント・プログラムとトランザクションを行ってテストし、終了する手順について順に説明します。各作業をクリックすると、その作業を行う手順が表示されます。
ステップ 1: 起動する前に行う準備作業
コード リスト3-19 IPC レポート
Ipc sizing (minimum /T values only)
Fixed Minimums Per Processor
SHMMIN:1
SHMALL:1
SEMMAP: SEMMNI
Variable Minimums Per Processor
SEMUME, A SHMMAX
SEMMNU, * *
Node SEMMNS SEMMSL SEMMSL SEMMNI MSGMNI MSGMAP SHMSEG
------ ------ ------ ------ ------ ------ ------ ------
sfpup 60 1 60 A + 1 10 20 76K
sfsup 63 5 63 A + 1 11 22 76K
where 1 <= A <= 8.
関連項目
ステップ 2: bankapp の起動
このレポートは、コンフィギュレーション内のすべてのサーバが起動するまで出力されます。起動したサーバの合計数が出力された時点で終了します。
必要であれば、コンフィギュレーションの一部のサーバだけを起動することもできます。たとえば、管理サーバだけを起動するには、-A オプションを指定します。オプションが指定されていない場合は、アプリケーション全体が起動します。
tmboot では、起動したサーバ数がレポートされるほかに、ULOG にメッセージが送信されます。
関連項目
ステップ 3: データベースへのデータの追加
populate.sh は、データベースにレコードを追加するシェル・スクリプトです。このスクリプトを使用して、bankapp を実行して、その機能をテストします。populate は、gendata と呼ばれるプログラムからシステム・サーバ ud にレコードを渡す 1 行のスクリプトです。gendata プログラムは、10 支店、30 窓口、200 口座のレコードを作成します。作成されたファイル内のレコードは、pop.out に記録されるので、サービス要求の作成時にデータベースの値を使用することができます。
スクリプトを実行するには、「populate」と入力します。
注記 populate スクリプトで出力された pop.out では、口座番号や支店番号などのフィールドを指定して取得できるので、自分のサービス要求に対する出力を生成できます。
関連項目
ステップ 4: bankapp サービスのテスト
. ./bankvar
audit {-a | -t} [branch_id]
auditcon
画面に次のメッセージが表示されます。
to request a TELLER or ACCOUNT balance for a branch,
type the letter t or a, followed by the branch id,
followed by <return>
for ALL TELLER or ACCOUNT balances, type t or a <return>
q <return> quits the program
要求を入力して Enter キーを押すと、指定された情報と次のメッセージが表示されます。
another balance request ??
driver -n1000
関連項目
ステップ 5: bankapp のシャットダウン
bankapp を終了するには、次のように、引数を指定せずに tmshutdown(1) コマンドを MASTER マシンで入力します。
$ tmshutdown
Shutdown all server processes?(y/n): y
Shutting down all server processes in /usr/me/BANKAPP/TUXCONFIG
Shutting down server processes ...
Server Id = 1 Group Id = BANKB1 Machine = Site1:shutdown succeeded.
このコマンド (または tmadmin のシャットダウン・コマンド) を実行すると、次のタスクが行われます。
関連項目
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |