Oracle Tuxedo ATMIアプリケーション開発のためのチュートリアル

     前  次    新規ウィンドウで目次を開く    PDFとして表示 - 新規ウィンドウ  Adobe Readerを入手 - 新規ウィンドウ
コンテンツはここから始まります

bankapp(完全なC言語アプリケーション)のチュートリアル

このトピックには次の項が含まれます:

 


bankappとは

bankappとは、Oracle Tuxedoソフトウェアに備わっているサンプルATMI銀行業務アプリケーションです。アプリケーションは、口座の開設および解約、口座の残高照会、口座への預金または口座からの引出し、ある口座から別の口座への振替えといった銀行教務を実行します。

このチュートリアルについて

このチュートリアルでは、bankappアプリケーションを開発して実行するための手順を順に示します。このチュートリアルでbankappの「開発」を経験すると、独自のアプリケーションを開発できるようになります。

bankappチュートリアルは、次の3つの項から構成されています。

注: ここで説明する内容は、アプリケーションの開発、管理、プログラミングに経験のあるUNIXおよびWindows 2003システムのユーザーを対象としています。また、Oracle Tuxedoソフトウェアについて理解していることを前提としています。

 


bankappの把握

このサンプル・アプリケーションの手順は、UNIXまたはWindows 2003環境で動作するシェル・スクリプトRUNME.shRUNME.cmdによって自動化されています。対応するreadmeファイルに、これらのファイルの実行方法が説明されています。これらのファイルに目をとおし実行の手順を十分に理解した上で、ここで説明する内容に従って操作をすれば、分散アプリケーションの設定と管理をよりスムーズに行うことができます。

bankappサンプル・アプリケーションでは、ソフトウェアに同梱のデモ版リレーショナル・データベースが使用されています。サンプル・アプリケーションに用意されたデモ用の各種コマンドとSQLコードを使用して、データベースにアクセスします。

ここでは、bankappアプリケーションを構成するファイル、クライアントおよびサービスについて説明します。それぞれの詳細は、次のアクティビティのいずれかをクリックしてください。

 


bankappのファイルについて

bankappアプリケーションを構成するファイルは、bankappディレクトリに置かれています。このディレクトリは、次の図のように構成されています。

銀行業務アプリケーションのファイルについて

bankappディレクトリには、次のファイルが置かれています。

次の表は、銀行業務アプリケーションを構成するファイルを示しています。Oracle Tuxedoソフトウェアに同梱のソース・ファイル、bankapp.mkの実行時に生成されるファイル、および各ファイルの簡単な説明がまとめられています。

表3-1 銀行業務アプリケーションを構成するファイル
ソース・ファイル
生成されるファイル
内容
ACCT.ec
ACCT.c、ACCT.o、ACCT
口座の開設と解約を行うOPEN_ACCTサービスとCLOSE_ACCTサービスが定義されたファイル。
ACCTMGR.c
ACCTMGR
イベント通知およびログ通知をサブスクライブするサーバー。WATCHDOGサービスおよびQ_OPENACCT_LOGサービスが定義されています。
AUDITC.c
AUDITC
auditconクライアントからのサービス・リクエストを処理する会話型サーバー。
BAL.ec
BAL.c、BAL.o、BAL
auditクライアント・プログラムが銀行単位または支店単位で口座残高と窓口残高を取得するためのABALサービス、TBALサービス、ABAL_BIDサービス、およびTBAL_BIDサービスが定義されたファイル。
BALC.ec
BALC.c、BALC.o、BALC
ABALC_BIDサービスおよびTBALC_BIDサービス。この2つのサービスは、前述のTBAL_BIDおよびABAL_BIDサービスと同じです。ただし、支店番号が見つからない場合、TPSUCCESSが返されてauditconの処理が続行します。
bankmgr.c
bankmgr
特に関心のあるイベントをサブスクライブするクライアント・プログラム。
BTADD.ec
BTADD.c、BTADD.o、BTADD
データベースに支店および窓口を追加するためのBR_ADDサービスとTLR_ADDサービスが定義されたファイル。
cracl.sh
-
アクセス制御のセキュリティ・レベルを示すアクセス制御リスト(ACL)を生成するシェル・スクリプト。
crqueue.sh
-
イベント通知で使用するためのアプリケーション・キューを作成するシェル・スクリプト。
crusers.sh
-
認証セキュリティ・レベルで定義されるグループおよびユーザーを生成するシェル・スクリプト。
event.flds
-
イベント機能で使用されるフィールド表ファイル。
FILES
-
bankappのすべてのファイルを説明したファイル・リスト。
README
-
Windows 2003を除くすべてのプラットフォームでのインストールと起動の手順について説明したファイル。
README.nt
-
Windows 2003プラットフォームでのインストールと起動の手順について説明したファイル。
README2
-
新機能を実現するためのbankappの拡張部分について説明したファイル。このファイルは、samples/atmi/bankappディレクトリにあります。
README2.nt
-
Windows 2003プラットフォーム用の新機能を実現するためのbankappの拡張部分について説明したファイル。このファイルは、samples\atmi\bankappディレクトリにあります。
RUNME.cmd
 
Windows 2003でアプリケーションをビルド、構成、起動、および停止するための対話型スクリプト。
RUNME.sh
-
UNIXでアプリケーションをビルド、構成、起動、および停止するための対話型スクリプト。
showq.sh!
-
メッセージ・キューのステータスおよびコンテンツを表示するシェル・スクリプト。
TLR.ec
TLR.c、TLR.o、TLR
WITHDRAWALDEPOSIT、およびINQUIRYの3つのサービスがあります。
usrevtf.sh
-
Oracle TuxedoサーバーのTMUSREVTENVFILEを生成するシェル・スクリプト。
XFER.c
XFER.o、XFER
TRANSFERサービスを含みます。
aud.v
aud.V、aud.h
auditクライアントとBALサーバーの間でやり取りされる構造体を定義するFML VIEW。
appinit.c
appinit.o
TLRを除くすべてのサーバーを対象とするtpsvrinit()およびtpsvrdone()のカスタマイズ・バージョン。
audit.c
audit.o、audit
ABALTBALABAL_BID、およびTBAL_BIDサービスを使用して、銀行単位または支店単位で口座残高と窓口残高を取得するクライアント。
auditcon.c
auditcon
会話型モードで動作し、ABALサービスTBALサービス、ABALC_BIDサービス、およびTBALC_BIDサービスを使用する対話型auditプログラム。
bankapp.mk
-
UNIX用のアプリケーションmakefile。
bankapp.nt
-
Windows 2003用のアプリケーションmakefile。
bank.flds
bank.flds.h
サーバーに使用される銀行データベース・フィールドとFML補助フィールドを含むフィールド表ファイル。
bank.h
-
アプリケーション内の複数のC言語プログラムに共通するデータ定義。
bankvar
-
bankappの一部の環境変数が定義されたファイル。ほかの変数はENVFILEで定義されています。ただし、ENVFILEbankvarを参照するので、アプリケーションのすべての環境変数はbankvarで定義できます。
crbank.sh
crbank
bankappをSHMモードで実行した場合に、全銀行のデータベースを生成するシェル・スクリプト。
crbank
crbankdb
1つのサーバー・グループで使用されるデータベースを生成するシェル・スクリプト。
crtlog.sh
crtlog、TLOG
マスター・サイトでUDLTLOGを生成し、非マスター・サイトでUDLを生成するシェル・スクリプト。
driver.sh
driver
ud(1)を使用して、FMLバッファを介してトランザクション・リクエストを送り、アプリケーションの処理を行うシェル・スクリプト。
envfile.sh
envfile、ENVFILE
tmloadcfで使用するENVFILEを生成するシェル・スクリプト。
gendata.c
gendata
udで読取り可能なリクエストを生成して、銀行を10、窓口を30、口座を200追加するシェル・プログラム。
gentran.c
gentran
udで読取り可能なトランザクション・リクエストをDEPOSITWITHDRAWALTRANSFER、およびINQUIRYサービスから生成するプログラム。
populate.sh
populate
ud(1)を使用して、FMLバッファに支店、窓口、および口座を追加するリクエストを格納し、それをデータベースに追加するシェル・スクリプト。
ubbmp
TUXCONFIG
MPモードの構成で使用するUBBCONFIGのサンプル・ファイル。
ubbshm
TUXCONFIG
SHMモードの構成で使用するUBBCONFIGのサンプル・ファイル。
util.c
util.o
サービスで共通して使用されるgetstrl()などの関数。
bankclt.c
bankclt
bankappのクライアント。

関連項目

 


bankappクライアントの検証

bankclt.cファイルとは

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

これらの各オプションは、アプリケーションの終了を除き、次のタスクを実行するサブルーチンを呼び出します:

  1. get_account()get_amount()get_socsec()get_phone()、およびget_val()関数を使用して、ユーザーによるキーボードからの入力を取得します。
  2. グローバルFMLバッファ(*fbfr)に値を追加します。関数によっては、ほかのフィールドを追加する場合もあります。これは、サーバーで必要となる情報によって異なります。
  3. do_tpcall()関数を使用してOracle Tuxedoシステムにリクエストを送信するルーチンが、必要なサービスを呼び出せるようにします。次の表は、関数とその関数によって呼び出されるサービスを示しています。
  4. 表3-2 関数によって呼び出されるサービス
    関数名
    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オカレンスの数です。

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

do_tpcall()関数(bankclt.cの447行で始まる)は次のとおりです:

リスト3-1 bankclt.c内のdo_tpcall()
/*
* This function does the tpcall to Tuxedo.
*/
static int
do_tpcall(char *service)
{

       long len;
       char *server_status;
       /* Begin a Global transaction */
       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) {
                     /* Server returned failure */
                     (void)fprintf(stderr, "%s returns failure
                     (%s)\n",
                            service,server_status);
              }
              else {
                     (void)fprintf(stderr,
                            "ERROR: %s failed (%s)\n", service,
                            tpstrerror(tperrno));
              }
              /* Abort the transaction */
              (void) tpabort(0);
              return(-1);
       }
       /* Commit the transaction */
       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では、Oracle Tuxedoプログラムud(1)が使用されます。ud(1)は、標準入力からフィールド化バッファを読み取り、それをサービスに送信します。サンプル・アプリケーションでは、udはpopulateおよびdriverプログラムで使用されています。

リクエスト/レスポンス・クライアント: audit.c

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

auditのソース・コードは、main()およびsum_bal()サブルーチンから構成されます。Oracle 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 not specified */
                   all 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ソース・コードの2つの主要部分をまとめたものです。

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

  1. /*アプリケーションへの参加*/
  2. /*グローバル・トランザクションの開始*/
  3. /*バッファの作成、およびデータ・ポインタの設定*/
  4. /* tpcallの実行*/
  5. /*グローバル・トランザクションのコミット*/
  6. /*アプリケーションからの分離*/

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

  1. /*バッファの作成、およびデータ・ポインタの設定*/
  2. /* tpacallの実行*/
  3. /* tpgetrplyを使用した応答の検索*/

会話型クライアント: 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クライアントの詳細は、bankappREADME2ファイル、またはbankmgr.cコードを参照してください。

関連項目

 


bankappサーバーとbankappサービスの検証

ここでは、次の内容について説明します。

サーバーとは、1つ以上のサービスを提供する実行可能プロセスです。Oracle Tuxedoシステムでは、サーバーはクライアントとして動作するプロセスから継続的にリクエストを受け取り、それを適切なサービスにディスパッチします。サービスとは、アプリケーションの処理を行うために記述されたC言語のサブルーチンです。Oracle Tuxedoアプリケーションは、サービスを提供し、リソース・マネージャにアクセスできるように作成されています。サービス・ルーチンは、Oracle 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ファイルです。

サーバー名
提供される機能
BTADD.ec
支店および窓口の記録を任意のサイトから適切なデータベースに追加します。
ACCT.ec
主な顧客サービスである口座の開設および解約(OPEN_ACCTおよびCLOSE_ACCT)を行います。
TLR.ec
窓口サービスであるWITHDRAWALDEPOSIT、およびINQUIRYを実行します。TLRプロセスでは、サーバーのコマンド行に指定された-T オプションによって、そのプロセスがTELLERファイル内の実際の窓口であることが認識されます。
XFER.c
データベースの任意の口座間で振替えを行います。
BAL.ec
データベースのすべての支店または特定の支店の口座残高を計算します。

bankapp会話型サーバー

AUDITCは、会話型サーバーの一例です。このサーバーでは、AUDITCと呼ばれるサービスが提供されます。会話型クライアントauditconは、AUDITCへの接続を確立し、そこに監査情報をリクエストします。

AUDITCはリクエストを評価し、必要な情報を得るために適切なサービス(ABALTBALABAL_BID、またはTBAL_BID)を呼び出します。呼び出されたサービスから応答を受信すると、AUDITCはその応答をauditconに返します。会話型サーバーのサービスは、リクエスト/レスポンス・サービスを呼び出すことができます。別の会話型サーバーとの接続を確立することもできますが、この機能はAUDITCでは提供されていません。

bankappサービス

bankappでは、12種類のリクエスト/レスポンス・サービスが提供されます。bankappの各サービス名は、サーバーのソース・コード内にあるC言語の関数名と一致します。

このサービスは
このサーバーによって提供され
この入力を使用して
この機能を実行します
BR_ADD
BTADD
FMLバッファ
  • 新規支店レコードを追加します。
TLR_ADD
BTADD
FMLバッファ
  • 新規窓口レコードを追加します。
OPEN_ACCT
ACCT
FMLバッファ
  • ACCOUNTファイルにレコードを挿入し、DEPOSITを呼び出して開設時の預け入れ額を加算します。
  • 開設を行った窓口のBRANCH_IDに基づき、新しい口座用のACCOUNT_IDを選択します。
CLOSE_ACCT
ACCT
FMLバッファ
  • ACCOUNTレコードを削除します。
  • ACCOUNT_IDを確認します。
  • WITHDRAWALを呼び出し、解約時の残高を削除します。
WITHDRAWAL
TLR
FMLバッファ
  • 指定された支店、窓口、口座の残高から金額を減算します。
  • ACCOUNT_IDおよびSAMOUNTフィールドを確認します。
  • 口座および窓口から預金が引出し可能であることを確認します。
DEPOSIT
TLR
FMLバッファ
  • 指定された支店、窓口、口座の残高に預け入れ額を加算します。
  • ACCOUNT_IDおよびSAMOUNTフィールドを確認します。
INQUIRY
TLR
FMLバッファ
  • 口座残高を取得します。
  • ACCOUNT_IDを確認します。
TRANSFER
XFER
FMLバッファ
  • tpcall()を呼び出してWITHDRAWALサービスをリクエストし、再度tpcall()を呼び出してDEPOSITサービスをリクエストします。
ABAL
BAL
aud.vのVIEWバッファ
  • 特定のサイトにおける全支店の口座残高を計算します。
TBAL
BAL
入力としてのaud.vのVIEWバッファ
  • 特定のサイトにおける全支店の窓口残高を計算します。
ABAL_BID
BAL
入力としてのaud.vのVIEWバッファ
  • 特定のBRANCH_IDの窓口残高を計算します。
TBAL_BID
BAL
入力としてのaud.vのVIEWバッファ
  • 特定のBRANCH_IDの窓口残高を計算します。

bankappサービスのアルゴリズム

次の擬似コードは、bankappの各サービスで使用されるアルゴリズムを示しています。サービスには、BR_ADDTLR_ADDOPEN_ACCTCLOSE_ACCTWITHDRAWALDEPOSITINQUIRYTRANSFERABALTBALABAL_BID、およびTBAL_BIDがあります。このサンプル・コードを参考にすると、bankappサーバーのソース・コードを理解しやすくなります。

リスト3-4 BR_ADDの擬似コード
    void BR_ADD (TPSVCINFO *transb)
    {
            -set pointer to TPSVCINFO data buffer;
            -get all values for service request from field buffer;
            -insert record into BRANCH;
            -tpreturn() with success;
    }
リスト3-5 TLR_ADD擬似コード
    void TLR_ADD (TPSVCINFO *transb)
    {
            -set pointer to TPSVCINFO data buffer;
            -get all values for service request from fielded buffer;
            -get TELLER_ID by reading branch's LAST_ACCT;
            -insert teller record;
            -update BRANCH with new LAST_TELLER;
            -tpreturn() with success;
    }
リスト3-6 OPEN_ACCTの擬似コード
    void OPEN_ACCT(TPSVCINFO *transb)
    {
        -Extract all values for service request from fielded buffer using Fget()
         and Fvall();
        -Check that initial deposit is positive amount and tpreturn() with
         failure if not;
        -Check that branch ID is a legal value and tpreturn() with failure if it
         is not;
        -Set transaction consistency level to read/write;
        -Retrieve BRANCH record to choose new account based on branch's LAST_ACCT
         field;
        -Insert new account record into ACCOUNT file;
        -Update BRANCH record with new value for LAST_ACCT;
        -Create deposit request buffer with tpalloc(); initialize it for FML with
         Finit();
        -Fill deposit buffer with values for DEPOSIT service request;
         -Increase priority of coming DEPOSIT request since call is from a service;
        -Do tpcall() to DEPOSIT service to add amount of initial balance;
        -Prepare return buffer with necessary information;
        -Free deposit request buffer with tpfree();
         tpreturn() with success;
    }
リスト3-7 CLOSE_ACCTの擬似コード
    void CLOSE_ACCT(TPSVCINFO *transb)
    {
       -Extract account ID from fielded buffer using Fvall();
       -Check that account ID is a legal value and tpreturn() with failure if it
        is not;
       -Set transaction consistency level to read/write;
       -Retrieve ACCOUNT record to determine amount of final withdrawal;
       -Create withdrawal request buffer with tpalloc(); initialize it for FML
        with Finit();
       -Fill withdrawal buffer with values for WITHDRAWAL service request;
       -Increase priority of coming WITHDRAWAL request since call is from
        a service;
       -Do tpcall() to WITHDRAWAL service to withdraw balance of account;
       -Delete ACCOUNT record;
       -Prepare return buffer with necessary information;
       -Free withdrawal request buffer with tpfree();
       tpreturn with success;
    }
リスト3-8 WITHDRAWALの擬似コード
    void WITHDRAWAL(TPSVCINFO *transb)
    {
       -Extract account id and amount from fielded buffer using Fvall() and Fget();
      -Check that account id is a legal value and tpreturn() with failure if not;
            -Check that withdraw amount (amt) is positive and tpreturn() with failure
        if not;
       -Set transaction consistency level to read/write;
       -Retrieve ACCOUNT record to get account balance;
       -Check that amount of withdrawal does not exceed ACCOUNT balance;
       -Retrieve TELLER record to get teller's balance and branch id;
       -Check that amount of withdrawal does not exceed TELLER balance;
       -Retrieve BRANCH record to get branch balance;
       -Check that amount of withdrawal does not exceed BRANCH balance;
       -Subtract amt to obtain new account balance;
       -Update ACCOUNT record with new account balance;
       -Subtract amt to obtain new teller balance;
       -Update TELLER record with new teller balance;
       -Subtract amt to obtain new branch balance;
       -Update BRANCH record with new branch balance;
       -Insert new HISTORY record with transaction information;
       -Prepare return buffer with necessary information;
        tpreturn with success;
    }
リスト3-9 DEPOSITの擬似コード
    void DEPOSIT(TPSVCINFO *transb)
    {
        -Extract account id and amount from fielded buffer using Fvall() and Fget();
      -Check that account ID is a legal value and tpreturn() with failure if not;
      -Check that deposit amount (amt) is positive and tpreturn() with failure if
        not;
      -Set transaction consistency level to read/write;
      -Retrieve ACCOUNT record to get account balance;
      -Retrieve TELLER record to get teller's balance and branch ID;
      -Retrieve BRANCH record to get branch balance;
      -Add amt to obtain new account balance;
      -Update ACCOUNT record with new account balance;
      -Add amt to obtain new teller balance;
      -Update TELLER record with new teller balance;
      -Add amt to obtain new branch balance;
      -Update BRANCH record with new branch balance;
      -Insert new HISTORY record with transaction information;
      -Prepare return buffer with necessary information;
      tpreturn() with success;
    }
リスト3-10 INQUIRYの擬似コード
    void INQUIRY(TPSVCINFO *transb)
    {
      -Extract account ID from fielded buffer using Fvall();
      -Check that account ID is a legal value and tpreturn() with failure if not;
      -Set transaction consistency level to read only;
      -Retrieve ACCOUNT record to get account balance;
      -Prepare return buffer with necessary information;
       tpreturn() with success;
    }
リスト3-11 TRANSFER擬似コード
    void TRANSFER(TPSVCINFO *transb)
    {
       -Extract account ID's and amount from fielded buffer using Fvall()
        and Fget();
       -Check that both account IDs are legal values and tpreturn() with
        failure if not;
       -Check that transfer amount is positive and tpreturn() with failure if
        it is not;
       -Create withdrawal request buffer with tpalloc(); initialize it for
        FML with
        Finit();
         -Fill withdrawal request buffer with values for WITHDRAWAL service request;
       -Increase priority of coming WITHDRAWAL request since call is from
        a service;
       -Do tpcall() to WITHDRAWAL service;
       -Get information from returned request buffer;
       -Reinitialize withdrawal request buffer for use as deposit request buffer
          with Finit();
       -Fill deposit request buffer with values for DEPOSIT service request;
       -Increase priority of coming DEPOSIT request;
       -Do tpcall() to DEPOSIT service;
       -Prepare return buffer with necessary information;
       -Free withdrawal/deposit request buffer with tpfree();
       tpreturn() with success;
    }
リスト3-12 ABALの擬似コード
    void ABAL(TPSVCINFO *transb)
    {
       -Set transaction consistency level to read only;
       -Retrieve sum of all ACCOUNT file BALANCE values for the
         database of this server group (A single ESQL
         statement is sufficient);
       -Place sum into return buffer data structure;
       tpreturn( ) with success;
    }
リスト3-13 TBALの擬似コード
    void TBAL(TPSVCINFO *transb)
    {
       -Set transaction consistency level to read only;
       -Retrieve sum of all TELLER file BALANCE values for the
         database of this server group (A single ESQL
         statement is sufficient);
       -Place sum into return buffer data structure;
       tpreturn( ) with success;
    }
リスト3-14 ABAL_BIDの擬似コード
    void ABAL_BID(TPSVCINFO *transb)
    {
       -Set transaction consistency level to read only;
       -Set branch_ID based on transb buffer;
       -Retrieve sum of all ACCOUNT file BALANCE values for records
         having BRANCH_ID = branch_ID (A single ESQL
         statement is sufficient);
       -Place sum into return buffer data structure;
       tpreturn( ) with success;
    }
リスト3-15 TBAL_BIDの擬似コード
    void TBAL_BID(TPSVCINFO *transb)
    {
       -Set transaction consistency level to read only;
       -Set branch_ID based on transb buffer;
       -Retrieve sum of all TELLER file BALANCE values for records
         having BRANCH_ID = branch_ID (A single ESQL
         statement is sufficient);
       -Place sum into return buffer data structure;
       tpreturn( ) with success;
    }

サーバーに組込みのユーティリティ

bankappのソース・ファイルには、appinit.cutil.cという2つのC言語サブルーチン・ファイルがあります。

サービスをコーディングする別の方法

bankappのソース・ファイルでは、すべてのサービスがサーバーのソース・コードとして参照されるファイルに組み込まれています。これらのファイルはbankappサーバーと名前が同じですが、main()関数が含まれていないので実際にはサーバーではありません。標準main()は、buildserverコマンドの実行時にOracle Tuxedo ATMIによって提供されます。

Oracle Tuxedoシステム・アプリケーションを作成する別の方法として、各サービス・サブルーチンを別のファイルに記述する方法があります。この方法を使用して、TLRサーバーを作成するとします。TLR.ecファイルには3つのサービスが定義されています。次の手順に従って、これらのサービスをINQUIRY.ecWITHDRAW.ec、およびDEPOSIT.ecの3つの.ecファイルに分けます。次の手順に従います。

  1. 各.ecファイルを.oファイルにコンパイルします。
  2. 各.oファイルに-fオプションを指定して、buildserverコマンドを実行します。
  3.     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行に入力できます。

この例で説明するように、1つのソース・ファイルにすべてのサービス関数をコーディングする必要はありません。つまり、ソース・プログラム・ファイルとしてサーバーが存在する必要はまったくありません。様々なソース・ファイルから導出し、buildserverコマンド行で指定したファイルを介して実行可能なサーバーとして存在することが可能です。これによりサーバーをより自由にビルドできます。

関連項目

 


bankappのファイルおよびリソースの準備

ここでは、bankappの実行に必要なファイルとリソースを作成するための手順を順に示します。

各作業をクリックすると、その作業を行う手順が表示されます。

 


ステップ1 :環境変数の設定

環境変数は、bankvarファイルに定義されています。このファイルは数多くのコメントが記述された大きな(約185行から構成される)ファイルです。

  1. テキスト・エディタで、bankvarファイルの内容を確認します。
    • コメントではない最初のコード行では、TUXDIRが設定されているかどうかが確認されます。設定されていない場合、ファイルの実行が失敗して、次のメッセージが表示されます。
    • TUXDIR: parameter null or not set
  2. TUXDIRパラメータにOracle Tuxedoシステムのディレクトリ構造でのルート・ディレクトリを設定し、エクスポートします。
  3. bankvarの別のコード行で、APPDIR${TUXDIR}/samples/atmi/bankappが設定されています。これは、bankappソース・ファイルが置かれるディレクトリです。APPDIRは、Oracle Tuxedoシステムがアプリケーション固有のファイルを検索するディレクトリです。オリジナルのソース・ファイルを保全するには、bankappファイルを別のディレクトリにコピーします。その場合は、そのディレクトリをそこに入力します。TUXDIRの下位ディレクトリである必要はありません。
  4. DIPCKEYに値を設定します。これは、Oracle Tuxedoシステム・データベースのIPCKEYです。DIPCKEYの値は、UBBCONFIGファイルで指定されたOracle TuxedoシステムのIPCKEYとは異なる値を指定する必要があります。
  5. 注: bankvarで指定されるほかの変数は、サンプル・アプリケーションで各種の働きをします。独自のアプリケーションを開発する場合は、それらの働きについて認識しておくことが必要です。bankvarにはすべての変数が定義されているので、後で実際のアプリケーションのテンプレートとして使用できます。
  6. bankvarに必要な変更を加えたら、次のようにbankvarを実行します。
  7. . ./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
    #
    # This file sets all the environment variables needed by the TUXEDO software
    # to run the bankapp
    #
    # This directory contains all the TUXEDO software
    # System administrator must set this variable
    #
    if [ -z "${TUXDIR}" ] ; then
    if [ ! -z "${ROOTDIR}" ] ; then
    TUXDIR=$ROOTDIR
    export TUXDIR
    fi
    fi
    TUXDIR=${TUXDIR:?}
    #
    # Reset LANG if necessary
    #
    if [ ! -d ${TUXDIR}/locale/C -a -d ${TUXDIR}/locale/english_us ] ; then
    export LANG
    LANG=english_us.ascii
    fi
    #
    # This directory contains all the user written code
    #
    # Contains the full path name of the directory that the application
    # generator should place the files it creates
    #
    APPDIR=${TUXDIR}/apps/bankapp
    #
    # This path contains the shared objects that are dynamically linked at
    # runtime in certain environments, e.g., SVR4.
    #
    LD_LIBRARY_PATH=${TUXDIR}/lib:${LD_LIBRARY_PATH}
    #
    # Set the path to shared objects in HP-UX
    #
    SHLIB_PATH=${TUXDIR}/lib:${SHLIB_PATH}
    #
    # Set the path to shared objects in AIX
    #
    LIBPATH=${TUXDIR}/lib:/usr/lib:${LIBPATH}
    #
    # Logical block size; Database Administrator must set this variable
    #
    BLKSIZE=512
    #
    # Set default name of the database to be used by database utilities
    # and database creation scripts
    #
    DBNAME=bankdb
    #
    # Indicate whether database is to be opened in share or private mode
    #
    DBPRIVATE=no
    #
    # Set Ipc Key for the database; this MUST differ from the UBBCONFIG
    # *RESOURCES IPCKEY parameter
    #
    DIPCKEY=80953
    #
    # Environment file to be used by tmloadcf
    #
    ENVFILE=${APPDIR}/ENVFILE
    #
    # List of field table files to be used by mc, viewc, tmloadcf, etc.
    #
    FIELDTBLS=Usysflds,bankflds,creditflds,eventflds
    #
    FIELDTBLS32=Usysfl32,evt_mib,tpadm
    #
    # List of directories to search to find field table files
    #
    FLDTBLDIR=${TUXDIR}/udataobj:${APPDIR}
    #
    FLDTBLDIR32=${TUXDIR}/udataobj:${APPDIR}
    #
    # Universal Device List for database
    #
    FSCONFIG=${APPDIR}/bankdl1
    #
    # Network address, used in MENU script
    #
    NADDR=
    #
    # Network device name
    #
    NDEVICE=
    #
    # Network listener address, used in MENU script
    #
    NLSADDR=
    #
    # Make sure TERM is set
    #
    TERM=${TERM:?}
    #
    # Set device for the transaction log; this should match the TLOGDEVICE
    # parameter under this site's LMID in the *MACHINES section of the
    # UBBCONFIG file
    #
    TLOGDEVICE=${APPDIR}/TLOG
    #
    # Device for binary file that gives the BEA Tuxedo system all its information
    #
    TUXCONFIG=${APPDIR}/tuxconfig
    #
    # Set the prefix of the file which is to contain the central user log;
    # this should match the ULOGPFX parameter under this site's LMID in the
    # *MACHINES section of the UBBCONFIG file
    #
    ULOGPFX=${APPDIR}/ULOG
    #
    # System name, used by RUNME.sh
    #
    UNAME=
    #
    # List of view files to be used by viewc, tmloadcf, etc.
    #
    VIEWFILES=aud.V
    #
    VIEWFILES32=mib_views,tmib_views
    #
    # List of directories to search to find view files
    #
    VIEWDIR=${TUXDIR}/udataobj:${APPDIR}
    #
    VIEWDIR32=${TUXDIR}/udataobj:${APPDIR}
    #
    # Specify the Q device (if events included in demo)
    #
    QMCONFIG=${APPDIR}/qdevice
    #
    # Export all variables just set
    #
    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
    #
    # Add TUXDIR/bin to PATH if not already there
    #
    a="`echo $PATH | grep ${TUXDIR}/bin`"
    if [ x"$a" = x ]
    then
    PATH=${TUXDIR}/bin:${PATH}
    export PATH
    fi
    #
    # Add APPDIR to PATH if not already there
    #
    a="`echo $PATH | grep ${APPDIR}`"
    if [ x"$a" = x ]
    then
    PATH=${PATH}:${APPDIR}
    export PATH
    fi

    #
    # Check for other machine types bin directories
    #
    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)コマンドを使用して、Oracle Tuxedo ATMI main()関数で実行可能ATMIサーバーを作成します。このコマンドではオプションを使用して、出力ファイル、アプリケーションで提供される入力ファイル、各種の方法でOracle Tuxedoシステム・アプリケーションを実行するためのライブラリを指定します。

buildserverは、ccコマンドを呼び出します。環境変数のCCを設定すると別のコンパイル・コマンドを指定でき、CFLAGSを設定するとコンパイル時と編集時にフラグを設定できます。buildserverコマンドはbankapp.mkで使用され、銀行業務アプリケーションの各サーバーをコンパイルしてビルドします。次に、bankappの6種類のサーバーについて説明します。

ACCTサーバーのビルド

ACCTサーバーは、OPEN_ACCTおよびCLOSE_ACCT関数のコードが記述されたACCT.ecという名前のファイルに導出されます。2手順で作成されます。ACCT.ecは最初にACCT.oファイルにコンパイルされ、このファイルは続いてbuildserverコマンドに指定されます。これにより、あらゆるコンパイル時のエラーを特定して解決することができます。

  1. ACCT.oファイルを作成します(bankapp.mkで作成されます)。
    • esql ACCT.ecと指定して、.cファイルを生成します。
    • cc -I $TUXDIR/include -c ACCT.cと指定して、.oファイルを生成します。
    • 次のbuildserverコマンドを指定して、ACCTサーバーを作成します。
    •     buildserver -r TUXEDO/SQL \
      -s OPEN_ACCT -s CLOSE_ACCT \
      -o ACCT \
      -f ACCT.o -f appinit.o -f util.o
      注: 前述のコマンド行の円マークは、改行を明示的に示すために表記されているだけです。コマンドとオプションは1行に入力できます。

次は、buildserverコマンド行で指定されている各オプションの説明です。

次に、ACCTサーバーを作成するために、buildserverコマンド行に指定されたオプションで行われる操作を簡単にまとめます。

BALサーバーのビルド

BALサーバーは、ABALTBALABAL_BID、およびTBAL_BID関数のコードが記述されたBAL.ecファイルから生成されます。ACCT.ecファイルと同様に、BAL.ecをコンパイルしてBAL.oファイルを生成し、それをbuildserverコマンドに渡します。そのため、コンパイル・エラーを特定でき、サーバーをビルドする前に修正することができます。

  1. 次のように、buildserverコマンドでBALサーバーをビルドします。
  2.     buildserver -r TUXEDO/SQL \
    -s ABAL -s TBAL -s ABAL_BID -s TBAL_BID\
    -o BAL \
    -f BAL.o -f appinit.o
    注: 前述のコマンド行の円マークは、改行を明示的に示すために表記されているだけです。コマンドとオプションは1行に入力できます。
    • -rオプションは、Oracle TuxedoシステムSQLリソース・マネージャを指定します。
    • -sオプションは、BALサーバーを構成するサービスとして、ABALTBALABAL_BIDTBAL_BIDを指定します。これらのサービス名は、そのサービスを定義するBAL.ecファイルの関数名と同じです。
    • -oオプションは、実行可能サーバーにBALという名前を指定します。
    • -fオプションは、BAL.oappinit.oファイルがリンク時と編集時に使用されることを指定します。

BTADDサーバーのビルド

BTADDサーバーは、BR_ADDおよびTLR_ADD関数のコードが記述されたBTADD.ecファイルから生成されます。BTADD.ecをコンパイルしてBTADD.oファイルを生成し、それをbuildserverコマンドに渡します。

  1. 次のように、buildserverコマンドでBTADDサーバーをビルドします。
  2.     buildserver -r TUXEDO/SQL \
    -s BR_ADD -s TLR_ADD \
    -o BTADD \
    -f BTADD.o -f appinit.o
    注: 前述のコマンド行の円マークは、改行を明示的に示すために表記されているだけです。コマンドとオプションは1行に入力できます。
    • -rオプションは、Oracle TuxedoシステムSQLリソース・マネージャを指定します。
    • -sオプションは、BTADDを構成するサービスとして、BR_ADDTLR_ADDを指定します。これらのサービス名は、そのサービスを定義するBTADD.ecファイルの関数名と同じです。
    • -oオプションは、実行可能サーバーにBTADDという名前を指定します。
    • -f オプションは、BTADD.oappinit.oファイルがリンク時と編集時に使用されることを指定します。

TLRサーバーのビルド

TLRサーバーは、DEPOSITWITHDRAWAL、およびINQUIRY関数のコードが記述されたTLR.ecファイルから生成されます。TLR.ecをコンパイルしてTLR.oファイルを生成し、それをbuildserverコマンドに渡します。

  1. 次のように、buildserverコマンドでTLRサーバーをビルドします。
  2.     buildserver -r TUXEDO/SQL \
    -s DEPOSIT -s WITHDRAWAL -s INQUIRY \
    -o TLR \
    -f TLR.o -f util.o -f -lm
    注: 前述のコマンド行の円マークは、改行を明示的に示すために表記されているだけです。コマンドとオプションは1行に入力できます。
    • -rオプションは、Oracle TuxedoシステムSQLリソース・マネージャを指定します。
    • -sオプションは、TLRサーバーを構成するサービスとして、DEPOSITWITHDRAWAL、およびINQUIRYを指定します。これらのサービス名は、そのサービスを定義するTLR.ecファイルの関数名と同じです。
    • -oオプションは、実行可能サーバーにTLRという名前を指定します。
    • -fオプションは、TLR.outil.oファイルがリンク時と編集時に使用されることを指定します。
    • 注: 前述のサンプル・コードでは、-fを使用して、オプション(-lm)をccコマンドに渡しています。このコマンドは、buildserverによって呼び出されます。-f-lmの引数を指定すると、コンパイル時にmathライブラリがリンクされます。

コンパイル時に使用できるオプションについては、『UNIX System V User's Reference Manual』cc(1)を参照してください。

XFERサーバーのビルド

XFERサーバーは、TRANSFER関数のコードが記述されたXFER.cファイルから生成されます。XFER.cをコンパイルしてXFER.oファイルを生成し、それをbuildserverコマンドに渡します。

  1. 次のように、buildserverコマンドでXFERサーバーをビルドします。
  2.     buildserver -r TUXEDO/SQL \
    -s TRANSFER \
    -o XFER \
    -f XFER.o -f appinit.o
    注: 前述のコマンド行の円マークは、改行を明示的に示すために表記されているだけです。コマンドとオプションは1行に入力できます。
    • -rオプションは、Oracle TuxedoシステムSQLリソース・マネージャを指定します。
    • -sオプションを使用して、XFERサーバーを構成するサービスとしてTRANSFERを指定します。このサービス名は、TRANSFERサービスを定義するXFER.cファイルの関数名と同じです。
    • -oオプションを使用して、実行可能サーバーにXFERという名前を指定します。
    • -fオプションを使用して、XFER.oappinit.oファイルがリンク時と編集時に使用されることを指定します。

bankapp.mkファイルでビルドされるサーバー

bankappサーバーをビルドする場合、buildserverコマンドの指定方法を理解していることが大切です。ただし、実際にビルドする場合、makefileにビルドの定義を記述することがよくあります。bankappでもその方法が採用されています。

 


ステップ3 : bankapp Makefileの編集

bankappには、すべてのスクリプトを実行可能にし、VIEW記述ファイルをバイナリ形式に変換し、アプリケーション・サーバーの作成に必要なすべてのプリコンパイル、コンパイル、およびビルドを行うmakefileが提供されています。また、最初からやりなおす場合にもこのファイルを利用できます。

提供されているbankapp.mkをそのまま使わずにフィールドを編集した方がよい場合があります。また、説明が必要なフィールドもあります。次にそれらのフィールドについて説明します。

TUXDIRパラメータの編集

  1. bankapp.mkファイルの40行目前後に、次のコメントとTUXDIRパラメータが記述されています。
  2.     #
    # Root directory of TUXEDO System. This file must either be edited to set
    # this value correctly, or the correct value must be passed via "make -f
    # bankapp.mk TUXDIR=/correct/tuxdir", or the build of bankapp will fail.
    #
    TUXDIR=../..
  3. TUXDIRパラメータを、Oracle Tuxedoシステム・インストールのルート・ディレクトリの絶対パス名に設定します。

APPDIRパラメータの編集

  1. APPDIRパラメータに設定された値を確認します。bankappの場合、APPDIRにはbankappファイルが置かれたディレクトリ(TUXDIRの相対パス)が指定されています。次に示すbankapp.mkのセクションには、APPDIRの設定についての説明と定義が記述されています。
  2.     #
    # Directory where the bankapp application source and executables reside.
    # This file must either be edited to set this value correctly, or the
    # correct value must be passed via "make -f bankapp.mk
    # APPDIR=/correct/appdir", or the build of bankapp will fail.
    #
    APPDIR=$(TUXDIR)/samples/atmi/bankapp
    #
  3. READMEファイルに従って、別のディレクトリにファイルをコピーした場合、APPDIRにはファイルのコピー先のディレクトリを指定します。makefileを実行すると、そのディレクトリにアプリケーションがビルドされます。

リソース・マネージャのパラメータの設定

デフォルトでは、bankappはデータベース・リソース・マネージャとしてOracle Tuxedo/SQLを使用するように設定されています。その場合、ご使用のシステムにOracle Tuxedoシステム・データベースがインストールされていることが必要です。インストールされていない場合は、RMパラメータにTUXDIR/udataobj/RMにリストされているリソース・マネージャの名前を設定します。

    #
# Resource Manager
#
RM=TUXEDO/SQL
#
注: Oracle Tuxedo SQLリソース・マネージャは、デモ用のプログラムです。

bankapp.mkファイルの実行

  1. bankapp.mkに必要な変更を加えたら、次のコマンド行を入力して実行します。
  2.     nohup make -f bankapp.mk &
  3. nohup.outファイルを調べて、処理が正しく行われたことを確認します。
  4. 注: bankvarには、bankapp.mkの実行時に参照されるパラメータが設定されています。

関連項目

 


ステップ4 : bankappデータベースの作成

ここでは、bankappとリソース・マネージャ(通常はデータベース管理システム)間のインタフェース、およびbankappデータベースを作成する方法について説明します。bankappでは、Oracle Tuxedoシステム・データベース、つまりXA準拠のリソース・マネージャのOracle Tuxedo/SQLの機能が使用されます。

注: Oracle Tuxedo SQLリソース・マネージャは、デモ用のプログラムです。

bankappデータベースの作成方法は、アプリケーションを単一プロセッサ(SHMモード)または複数プロセッサのネットワーク(MPモード)のいずれで起動するかによって異なります。

SHMモードでのデータベースの作成

  1. 次のコマンドを入力して、環境変数を設定します。
  2.     . ./bankvar
  3. crbankを実行します。crbankcrbankdbを3回呼び出し、そのたびに環境変数が変更されます。そのため、1つのマシンで3つの異なるデータベース・ファイルが作成されます。つまり、ネットワーク接続されていない場合でも、複数のマシンから構成されるOracle Tuxedoシステム環境をシミュレートできます。

MPモードでのデータベースの作成

  1. 次のコマンドを入力して、環境変数を設定します。
  2.     . ./bankvar
    注: すでに環境変数を設定している場合があります。詳しい手順は、「環境変数の設定」を参照してください。
  3. crbankdbを実行して、このサイトのデータベースを作成します。
  4. Oracle Tuxedoシステムのネットワークに追加した各マシンで、bankvarを編集してFSCONFIG変数のパス名を指定します。このパス名は、そのサイトで使用され、構成ファイルubbmpで参照される変数です。手順1と2を繰り返します。

関連項目

 


ステップ5 : XA準拠のリソース・マネージャの準備

XA準拠の代替リソース・マネージャでbankappを実行するには、各種のファイルを変更する必要があります。ここでは、次の内容について説明します。

bankvarファイルの変更

  1. Oracle Tuxedoシステム・データベースを作成する環境変数を確認します。これらの環境変数には、次のデフォルト値が設定されています。
  2.     BLKSIZE=512
    DBNAME=bankdb
    DBPRIVATE=no
    DIPCKEY=80953
    FSCONFIG=${APPDIR}/bankdl1
    注: これらの環境変数は、Oracle Tuxedoシステムだけを対象としています。ほかのデータベース管理システムを使用する場合は、必要に応じてほかの環境変数を設定してください。
  3. 必要に応じてこれらの変数を変更して、リソース・マネージャのデータベースを作成します。

bankappサービスの変更

bankappでは、データベースへのすべてのアクセスは埋込み型SQL文で実行されます。そのため、新しいリソース・マネージャでSQLがサポートされている場合は問題がありません。appinit.cユーティリティには、tpopen()tpclose()への呼出しが定義されています。

bankapp.mkファイルの変更

  1. bankapp.mkのRMパラメータを編集し、新しいリソース・マネージャの名前を指定します。
  2. RMファイルに次のエントリがあることを確認します。
  3. $TUXDIR/udataobj/RM
  4. 必要に応じて、SQLコンパイラ名とそのオプションを変更します。ソース・ファイル名に拡張子.ecが使用されていない場合があります。生成される.cファイルをコンパイルするには、デフォルトではない名前を設定することが必要な場合もあります。

crbankおよびcrbankdbの変更

  1. crbankが代替リソース・マネージャで処理されないことがあります。crbankは、変数をリセットして、crbankdbを3回実行するだけです。
  2. crbankdbを使用する場合は注意します。次のコード・リストは、crbankdbスクリプトの最初の部分です。このサンプル・コードの後に、Oracle Tuxedoシステム以外のリソース・マネージャでは機能しないコード部分について説明してあります。
  3. リスト3-17 crbankdbスクリプト
        #Copyright (c) BEA Systems, Inc.
        #All rights reserved
        #
        # Create device list
        #
        dbadmin<<!
        echo
        crdl
        # Replace the following line with your device zero entry
        ${FSCONFIG} 0 2560
        !
        #
        # Create database files, fields, and secondary indices
        #
        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シェル・コマンドに対する入力情報を提供する2つのドキュメントで構成されています。1つ目のhereファイルは、データベースのデバイス・リスト作成のためにOracle Tuxedoシステム・コマンドdbadminに渡されます。

このコマンドは、Oracle Tuxedoリソース・マネージャだけで機能します。表スペースを作成したり、適切な権限を認めるために、ほかのコマンドが必要になる場合があります。

構成ファイルの変更

GROUPSセクションで、TMSNAMEおよびOPENINFOパラメータに適切な値(つまり、リソース・マネージャで認識される値)を指定します。

 


Windows 2003プラットフォーム上でのbankappとOracle (XA準拠のRM)の統合

  1. nt\bankvar.cmdを編集し、次の環境変数に適切な値を指定します。
  2. TUXDIR : Root directory for the BEA TUXEDO system installation
    APPDIR : Application directory in which bankapp files are located
    ORACLE_HOME : Root directory of the Oracle8 installation
    ORACLE_SID : Oracle System ID
    BLK_SIZE: Logical block size
    DBNAME: default name of the database to be used by database utilities and database creation scripts
    DBPRIVATE: indicates whether database is to be opened in share or private mode (yes or no)
    FSCONFIG:Universal Device List for database
    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%;
  3. スクリプトを実行して、環境変数を設定します。
  4. >bankvar
  5. 次のように、TUXDIR\udataobj\RMファイルを編集します。
    • $TUXDIR\udataobj\RMファイルに次の行を追加します。
    • Oracle_XA;xaosw;%ORACLE_HOME%\pro80\lib\msvc\sqllib80.lib %ORACLE_HOME%\RDBMS80\XA\xa80.lib

      Oracleがネットワーク上にある場合は、次のように編集します。

    • マシンをドライブ(Fなど)にマップします。
    • $TUXDIR\udataobj\RMファイルに次の行を追加します。
    • Oracle_XA;xaosw;f:\orant\pro80\lib\msvc\sqllib80.lib f:\orant\RDBMS80\XA\xa80.lib
    • RMファイルで、Oracle_XAの以前のエントリを削除します。
  6. Oracle8のトランザクション・マネージャ・サーバーをビルドします。
  7. cd $APPDIR
    buildtms -r Oracle_XA -o TMS_ORA
  8. 次の表に従って、nt\bankapp.makファイルを編集します。
  9. 作業
    次の環境変数を指定します。
    TUXDIR=Oracle Tuxedoシステムのインストール先のルート・ディレクトリ
     
    APPDIR=bankappファイルが置かれたアプリケーション・ディレクトリ
     
    RM=Oracle_XA
     
    ORACLE_LIBS=$(ORACLE_HOME) \PRO80\LIB
     
    RMNAME=Oracle_XA
     
    SQLPUBLIC=$(ORACLE_HOME)\PRO80\C\INCLUDE
     
    CFLAGS=$(HOST) -DNOWHAT=1 $(CGFLAGS) $(DFML32)
     
    CGFLAGS=-DWIN32 -W3 -MD -nologo
     
    ORACLE_DIR=$(ORACLE_HOME)\bin
     
    INCDIR=$(TUXDIR)\include
     
    CC=cl
    .ec.cセクションで、埋込み型のSQLプログラムからCプログラムを作成する場合の規則を編集し、procコンパイラを使用して次の値を設定します。
    set TUXDIR=$(TUXDIR) & $(ORACLE_DIR)\proc80 mode=ansi release_cursor=yes
    include=$(SQLPUBLIC) include=$(INCDIR) $(SQL_PLATFORM_INC) -c iname=$*.ec
    .c.objセクションで、Cプログラムからオブジェクト・ファイルを作成する場合の規則を編集し、次の値を設定します。
    $(CC) -c $(CFLAGS) $(SQLPUBLIC) $(INCLUDE) $*.c

  10. *.ecファイルを更新します。Oracle SQLコマンドを使用します。
  11. makefileを実行します。
  12. copy nt\bankapp.mak to %APPDIR%
    nmake -f bankapp.mak
  13. 次のように、nt\ubbshmを編集します。
  14. USER_ID=0
    GROUP_ID=0
    UNAME_SITE1=nodename returned by hostname
    TUXDIR=same as specified in bankvar
    APPDIR=same as specified in bankvar
  15. 次のように、構成ファイルのGROUPSセクションを変更します。
  16. 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=."
  17. バイナリ形式のOracle Tuxedo構成ファイルを作成します。
  18. tmloadcf -y nt/ubbshm
  19. マスター・マシン上にデバイス・リストとTLOGデバイスを作成します。
  20. crtlog -m
  21. Oracleデータベース・インスタンスが起動されていない場合は起動します。
  22. Oracle Tuxedoシステム・サーバーを起動します。
  23. tmboot -y
  24. v$XATRANS$ビューがデータベースにあることを確認します。V$XATRANS$ビューは、XAライブラリのインストール時に作成されます。
  25. v$XATRANS$ビューが作成されていない場合は、次のように作成します。
    • 環境変数ORACLE_HOMEおよびORACLE_SIDが設定されていることを確認します。
    • ユーザーSYSとしてデータベースにログインします。
    • Execute the sql script ${ORACLE_HOME}/RDBMS80/ADMIN/XAVIEW.sql
    • XAライブラリを使用するすべてのOracleアカウント・アプリケーションのビューに対するSELECT権限を認めます。
  26. bankappデータベースとOracle RMのデータベース・オブジェクトを作成します。
    • OracleユーティリティSQL*plusまたはSQL*DBAに、任意のOracleユーザーとしてログインします。
    • notepad crbank-ora8.sql
    • Oracle 8のインストール時にサンプル・データベースが作成されます。bankappアプリケーションでこのデータベースを使用できます。sqlスクリプトによってデータベース内に新しい表スペースが作成され、bankappのすべてのデータベース・オブジェクトを格納できます。新しい表スペースを使用するには、Oracleシステム・ユーザー・パスワードとファイルの絶対パス名を入力する必要があります。
    • 次のように、crbank-ora8.sqlを編集します。
    • WHENEVER OSERROR EXIT ;
      /*Obtain the password for user "system" */
      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
      /* Create a new tablespace in the default DB for use with "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;
      /***************** Create a user called "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) ;
  27. 前述の手順に従って、パスワードがPaSsWd2であるuser2、およびパスワードがPaSsWd3であるuser3を作成します。
  28. SQL*plus> start $APPDIR/ crbank-ora8.sql
  29. データベースにデータを追加します。
  30. nt\populate
  31. データベースに対してトランザクションを生成します。
  32. driver
  33. bankappクライアントを実行します。
  34. run
  35. アプリケーションを停止します。
  36. tmshutdown -y

関連項目

 


ステップ6 :構成ファイルの編集

構成ファイルには、アプリケーションの実行方法が定義されています。bankappには、テキスト形式の構成ファイル(UBBCONFIG(5)を参照)が2つ提供されています。単一のコンピュータ上のアプリケーションを定義するubbshmと、ネットワーク上のアプリケーションを定義するubbmpです。

初期化スクリプトは、サンプル・アプリケーションに提供されています。また、ご使用の構成およびマシンに合せて、.shを使用して10個までの完全な構成ファイルを生成できます。

  1. テキスト・エディタで、bankappubbshmおよびubbmp構成ファイルの内容を確認します。
  2. リスト3-18 ubbmp構成ファイル
             #Copyright (c) 1999 BEA Systems, Inc.
             #All rights reserved

             *RESOURCES
             IPCKEY 80952
        001 UID <user id from id(1)>
        002 GID <group id from id(1)>
             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's uname> LMID=SITE1
        004 TUXDIR="<TUXDIR>"
        005 APPDIR="<APPDIR>"
                              ENVFILE="<APPDIR>/ENVFILE"
                              TLOGDEVICE="<APPDIR>/TLOG"
                              TLOGNAME=TLOG
                              TUXCONFIG="<APPDIR>/tuxconfig"
        006 TYPE="<machine type>"
                              ULOGPFX="<APPDIR>/ULOG"
        007 <SITE2's uname> LMID=SITE2
                              TUXDIR="<TUXDIR>"
                              APPDIR="<APPDIR>"
                              ENVFILE="<APPDIR>/ENVFILE"
                              TLOGDEVICE="<APPDIR>/TLOG"
                              TLOGNAME=TLOG
                              TUXCONFIG="<APPDIR>/tuxconfig"
                              TYPE="<machine type>"
                              ULOGPFX="<APPDIR>/ULOG"
             #
             *GROUPS
             #
             # Group for Authentication Servers
             #
             Group for Application Queue (/Q) Servers
             #
             ##QGRP1 LMID=SITE1 GRP=102
             ## TMSNAME=TMS_QM TMSCOUNT=2
             ## OPENINFO=”TUXEDO/QM:<APPDIR>/qdevice:QSP_BANKAPP”
             #
             # Group for Event Broker Servers
             #
             ##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="<network address of SITE1>"
        010 NLSADDR="<network listener address of SITE1>"
        011 SITE2 NADDR="<network address of SITE2>"
        012 NLSADDR="<network listener address of SITE2>"
  3. アプリケーション・パスワード機能を有効にするには、ubbshmまたはubbmpRESOURCESセクションに次の行を追加します。
  4.     SECURITY       APP_PW
  5. 両方の構成ファイルで、一部のパラメータが山カッコ(< >)で囲まれています。山カッコで囲まれた値は、実際のインストールに適した値に置き換えます。これらのフィールドは両ファイルのRESOURCESMACHINESおよびGROUPSセクションにあります。ubbmpでは、NETWORKセクションにも置換が必要な値があります。表3-3では、ubbmpNETWORKセクションまで示し、単一マシン用のアプリケーションを作成する際、RESOURCESMACHINESおよびGROUPSの各セクションに必要となる変更もすべて説明しています。
  6. 表3-3 値の説明
    行番号
    置き換える文字列
    説明
    001
    UID
    掲示板のIPC構造体のオーナーを示す有効なユーザーID (UID)。マルチプロセッサ構成では、この値はすべてのマシンで同じにする必要があります。問題を回避するには、Oracle Tuxedoシステム・ソフトウェアのオーナーと同じUIDを使用します。
    002
    GID
    掲示板のIPC構造体のオーナーを示す有効なグループID (GID)。マルチプロセッサ構成では、この値はすべてのマシンで同じにする必要があります。アプリケーションの各ユーザーは、このグループIDを共有する必要があります。
    003
    SITE1の名前
    マシン名。UNIXプラットフォームでは、UNIXコマンドuname -nで出力される値を使用します。
    004
    TUXDIR
    Oracle Tuxedoソフトウェアのルート・ディレクトリの絶対パス名。ファイルに出現するすべての<TUXDIR>を指定したパス名に置き換えます。
    005
    APPDIR
    アプリケーションを実行するディレクトリの絶対バス名。ファイルに出現するすべての<APPDIR>を指定したパス名に置き換えます。
    006
    マシン・タイプ
    異なる種類のマシンが存在するネットワーク・アプリケーションで使用される識別文字列。Oracle Tuxedoシステムでは、通信を行う各マシンのマシン・タイプの値が確認されます。通信を行う2つのマシンのマシン・タイプが異なる場合は、メッセージのエンコード/デコード・ルーチンが呼び出されて、両方のマシンで認識される形式にデータが変換されます。
    007
    SITE2の名前
    2番目のマシン名。UNIXプラットフォームでは、UNIXコマンドuname -nで出力される値を使用します。
    008
    OPENINFO
    この文とそれに続くエントリは、Oracle Tuxedoシステムのリソース・マネージャで認識される形式になっています。ほかのリソース・マネージャで認識されるように変更(または削除)する必要があります。
    009
    SITE1のネットワーク・アドレス
    このマシンのBRIDGEプロセスに対するネットワーク・リスナーのアドレス。
    010
    SITE1のネットワーク・リスナー・アドレス
    このマシンのtlistenプロセスに対するネットワーク・リスナーのアドレス。
    011
    SITE2のネットワーク・アドレス
    このマシンのBRIDGEプロセスに対するネットワーク・リスナーのアドレス。マシンごとに異なる値を指定する必要があります。
    012
    SITE2のネットワーク・リスナー・アドレス
    このマシンのtlistenプロセスに対するネットワーク・リスナーのアドレス。

関連項目

 


ステップ7とステップ8 :バイナリ形式の構成ファイルとトランザクション・ログ・ファイルの作成

バイナリ形式の構成ファイルを作成する前に

バイナリ形式の構成ファイルを作成する場合、bankappファイルが置かれたディレクトリに移動し、環境変数を設定することが必要です。その場合、次の手順に従います。

  1. bankappファイルが置かれたディレクトリに移動します。
  2. 次のコマンドを入力して、環境変数を設定します。
  3. . ./bankvar

注: SHMモードでbankappを実行する場合は、tlistenプロセスを作成したり、別のマシンにトランザクション・ログを作成する必要はありません。

構成ファイルのロード

構成ファイルを編集したら、それをMASTERマシン上にバイナリ・ファイルとしてロードする必要があります。バイナリ形式の構成ファイルの名前はTUXCONFIG、そのパス名はTUXCONFIG環境変数に定義されています。このファイルは、Oracle Tuxedoのシステム管理者の有効なユーザーIDおよびグループIDを持つユーザーが作成し、この2つのIDは、ご使用の構成ファイルのUIDおよびGIDの値と同じであることが必要です。同じではない場合、bankappの実行時にパーミッションの問題が発生します。

  1. 次のコマンドを入力して、TUXCONFIGを作成します。
  2.     tmloadcf ubbmp

    構成のロード時には、この構成をインストールするかどうか、およびインストールする場合は既存の構成ファイルを上書きすることを確認するメッセージが何回か表示されます。このような確認を省くには、コマンド行で-yオプションを指定します。

  3. アプリケーションで必要なIPCリソースをOracle Tuxedoシステムで計算する場合は、コマンド行で-cオプションを指定します。

TUXCONFIGは、MASTERマシン上だけにインストールできます。アプリケーションの起動時にtmbootによってほかのマシンに伝播されます。

構成のオプションとしてSECURITYが指定されている場合、tmloadcfの実行時にアプリケーション・パスワードの入力が求められます。30文字までのパスワードを指定できます。アプリケーションに参加するクライアント・プロセスでは、パスワードを入力する必要があります。

ロードする前にtmloadcfによってテキスト形式の構成ファイル(UBBCONFIG)が解析されます。構文エラーが検出された場合、ファイルのロードは失敗します。

トランザクション・ログ(TLOG)ファイルの作成

TLOGは、Oracle Tuxedoシステムがグローバル・トランザクションを管理するために使用するトランザクション・ログです。アプリケーションを起動する前に、アプリケーションのすべてのマシン上のすべてのファイルにTLOGのエントリが作成されることが必要です。また、ログ自体のファイルは、MASTERマシン上に作成されることが必要です。

bankappでは、デバイス・リストとTLOGを作成するcrtlogと呼ばれるスクリプトが提供されています。デバイス・リストは、bankvarTLOGDEVICE変数を使用して作成されます。

  1. MASTERマシンで次のコマンドを入力して、TLOGおよびデバイス・リストを作成します。
  2.     crtlog -m
    注: 本番環境では、デバイス・リストはデータベースで使用されているものと同じでもかまいません。
  3. ほかのすべてのマシンでは、-mオプションを指定する必要はありません。システムの起動時に、MASTER以外のマシン上のBBLによってログが作成されます。

XA準拠ではないリソース・マネージャを使用している場合、トランザクション・ログは不要です。

関連項目

 


ステップ9 :各マシン上でのリモート・サービス接続の作成

tlistenはリスナー・プロセスで、Oracle Tuxedoアプリケーションのマシン間でtmbootなどのプロセスにリモート・サービス接続を提供します。構成ファイルのNETWORKセクションで定義されたネットワーク上のすべてのマシンにインストールされていることが必要です。

tlistenの起動については、『Oracle Tuxedoシステムのインストール』「tlistenプロセスの開始」を参照してください。

  1. bankapp用に新たにtlistenプロセスを起動することをお薦めします。その場合、次のコマンドを入力します。
  2.     tlisten -l nlsaddr

    nlsaddrの値は、構成ファイルでこのマシンのNLSADDRパラメータに指定された値と同じにする必要があります。この値はマシンによって異なるため、tlistenの引数が構成ファイルで指定された値と一致していることが重要です。

    注: この指定に関するエラーは、簡単には検出できません。tmloadcfでは、構成ファイルの値とtlistenコマンドの引数が一致しているかどうかは確認されません。この2つのアドレスが異なる場合、nlsaddrの値が一致しないマシンで起動に失敗します。また、tlistenプロセスが開始されていないマシンでも起動に失敗します。

tlistenで使用されるログ・ファイルは、Oracle Tuxedoシステムのほかのすべてのログ・ファイルとは別のログ・ファイルです。ただし、複数のtlistenプロセスで1つのログ・ファイルを使用できます。デフォルトのファイル名は、TUXDIR/udataobj/tlogです。

リスナー・プロセス(tlisten)の停止

tlistenは、デーモン・プロセスとして実行されます。tlistenを起動スクリプトに組み込んだり、cronジョブとして実行する方法については、Oracle Tuxedoリファレンス・マニュアル「tlisten(1)」を参照してください。

bankappでは、必要に応じて単にそれを開始するか停止するかのみを選択できます。停止するには、次のようにSIGTERMシグナルを送信します。

kill -15 pid

注: Windows 2003環境でリスナー・プロセスを開始または停止するには、コマンド行でtlistenを実行するか、またはコントロール・パネルを使用します。

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; Oracle 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 :起動する前に行う準備作業

  1. bankappを起動する前に、アプリケーションをサポートするのに十分なIPCリソースがマシンにあることを確認します。IPCリソースに関するレポートを出力するには、tmbootコマンドに-cオプションを指定します。
  2. 注: IPCリソースが不足していると起動が失敗する場合があるので、構成に対して適切な値が指定されていることを確認してください。
    リスト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.
  3. プロセッサごとに使用されるクライアント・アプリケーションの数を各MSGMNI値に追加します。MSGMAPMSGMNIの2倍にします。
  4. IPCの最低条件とご使用のマシンに対して設定されたパラメータとを比較します。これらのパラメータを定義する場所は、プラットフォームによって異なります。
    • ほとんどのUNIXシステム・プラットフォームの場合、マシンのパラメータは/etc/conf/cf.d/mtuneに定義されています。
    • Windows 2003プラットフォームの場合、マシンのパラメータはコントロール・パネルで設定したり表示します。

関連項目

 


ステップ2 : bankappの起動

  1. 環境変数を設定します。
  2. . ./bankvar 
  3. 次のコマンドを入力して、アプリケーションを起動します。
  4.     tmboot

    次のプロンプトが表示されます。

        Boot all admin and server processes? (y/n): y

    次のようなレポートが画面に出力されます。

    Booting all admin and server processes in /usr/me/appdir/tuxconfig
    Booting all admin processes
    exec BBL -A:
    process id=24223 Started.

このレポートは、構成内のすべてのサーバーが起動するまで出力されます。起動したサーバーの合計数が出力された時点で終了します。

必要であれば、構成の一部のサーバーだけを起動することもできます。たとえば、管理サーバーだけを起動するには、-Aオプションを指定します。オプションが指定されていない場合は、アプリケーション全体が起動します。

tmbootでは、起動したサーバー数がレポートされるほかに、ULOGにメッセージが送信されます。

関連項目

 


ステップ3 :データベースへのデータの追加

populate.shは、データベースにレコードを追加するシェル・スクリプトです。このスクリプトを使用して、bankappを実行して、その機能をテストします。populateは、gendataと呼ばれるプログラムからシステム・サーバーudにレコードを渡す1行のスクリプトです。gendataプログラムは、10支店、30窓口、200口座のレコードを作成します。作成されたファイル内のレコードは、pop.outに記録されるので、サービス・リクエストの作成時にデータベースの値を使用することができます。

スクリプトを実行するには、「populate」と入力します。

注: populateスクリプトで出力されたpop.outでは、口座番号や支店番号などのフィールドを指定して取得できるので、自分のサービス・リクエストに対する出力を生成できます。

関連項目

 


ステップ4 : bankappサービスのテスト

  1. 実行中のシステムにログインする場合は、bankappに環境変数を設定する必要があります。その場合、次のコマンドを入力します。
  2.     . ./bankvar
  3. auditクライアント・プログラムを実行します。auditクライアント・プログラムを実行するには、次のコマンドを入力します。
  4.     audit {-a | -t} [branch_id]

    口座残高を取得する場合は-a、窓口残高を取得する場合は-tを指定します。branch_idが指定されている場合、指定された支店だけがレポートされます。指定されていない場合、すべての支店データがレポートされます。口座番号、支店番号などauditに入力する値には、populateプログラムの出力であるpop.outにリストされている値を使用できます。

  5. auditconを実行します。auditプログラムの会話型バージョンを起動するには、次のコマンドを入力します。
  6.     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

    リクエストを入力して[Return]を押すと、指定された情報と次のメッセージが表示されます。

        another balance request ??
  7. このメッセージは、qを入力するまで繰り返し表示されます。
  8. driverプログラムを使用します。デフォルトでは、driverプログラムは300のトランザクションを生成します。トランザクションの数を変更する場合は、次のように-nオプションを使用します。コマンドは次のとおりです。
  9.     driver -n1000

    このコマンドは、プログラムが1000回ループして実行されることを指定しています。

    driverは、システム上での処理をシミュレートするための一連のトランザクションを生成するスクリプトです。このスクリプトは、bankappの一部として含まれているので、tmadminコマンドを実行して実際的な統計を取得できます。

関連項目

 


ステップ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の停止コマンド)を実行すると、次のタスクが行われます。

関連項目


  先頭に戻る       前  次