|
STOCKAPP は、Oracle Tuxedo システム ソフトウェアに同梱されている株式売買の ATMI サンプル アプリケーションです。このアプリケーションでは、顧客のアカウント情報の検証と更新、株式や株式投資信託の売買注文の執行など、株式売買関連の操作を実行できます。
ここでは、STOCKAPP アプリケーションを開発する方法について、手順を順に示して説明します。このチュートリアルに従って STOCKAPP の「開発」を経験すると、独自のアプリケーションを開発できるようになります。
STOCKAPP チュートリアルは、次の 3 つの節から構成されています。
| 注意 : | ここで説明する内容は、アプリケーションの開発、管理、プログラミングに経験のあるシステム ユーザを対象としています。また、Oracle Tuxedo システム ソフトウェアについて理解していることを前提としています。Oracle Tuxedo アプリケーションをビルドするには、開発ラインセンスが必要です。 |
ここでは、STOCKAPP アプリケーションを構成するファイル、クライアント、およびサービスについて説明します。各作業をクリックすると、その作業を行う手順が表示されます。
STOCKAPP アプリケーションを構成するファイルは、STOCKAPP ディレクトリに置かれています。このディレクトリは、次のように構成されています。

STOCKAPP ディレクトリには、次のファイルが置かれています。
次の表は、STOCKAPP を構成するファイルを示しています。この表には、Oracle Tuxedo システム ソフトウェアで提供されるソース ファイル、株式アプリケーションのビルド時に生成されるファイル、および各ファイルの簡単な説明がまとめられています。
Oracle Tuxedo システムの ATMI クライアント/サーバ アーキテクチャでは、通信に次の 2 つのモードがあります。
次の図は、STOCKAPP の構成を示しています。4 つのサービス要求のいずれかを選択します。楕円は、アプリケーション サービスを表しています。

型付きバッファは、Oracle Tuxedo システムの基本部分です。Oracle Tuxedo システムでは、型付きバッファに特定のデータ型が格納されます。定義されている型は、VIEW、STRING、CARRAY、X_OCTET、X_COMMON、および XML の 6 つです。アプリケーションで別の型を定義することもできます。
BUY は、クライアント プログラムの 1 つです。このプログラムでは、アカウントの照会が作成されて、BUYSR サービスが呼び出されます。このプログラムは、次のように実行可能プログラムとして呼び出します。
BUY
* システムへのクライアントの登録
* TPCALL の発行
* クリーン アップ
これらのセクションは、BUY.cbl で Oracle Tuxedo ATMI 関数が使用される場所です。csimpl.cbl と同様に、BUY.cbl では、TPINITIALIZE を呼び出してアプリケーションに参加し、TPCALL を呼び出してサービスの RPC 要求を行い、TPTERM を呼び出してアプリケーションを終了します。また、BUY.cbl では、cust ファイルで定義される構造体と VIEW 型のレコードが使用されます。構造体のソース コードは、VIEW 記述ファイル cust.V に記述されています。
cust などの VIEW 記述ファイルは、VIEW コンパイラ viewc(1) でコンパイルします。次に示すように、view(c) を実行して、コンパイルします。
viewc-C-n
cust.v
viewc には、COBOL ファイル (CUST.cbl)、バイナリ形式の VIEW 記述ファイル (cust.V)、およびヘッダ ファイル (cust.h) の 3 つの出力ファイルがあります。
クライアント プログラムの BUY.cbl、FUNDPR.cbl、FUNDUP.cbl、および SELL.cbl は、buildclient(1) でコンパイルされ、必要な Oracle Tuxedo ライブラリとリンクされます。
必要に応じて、これらのコマンドは個別に使用できます。その手順に関する規則は、STOCKAPP.mk に定義されています。
ATMI サーバとは、1 つ以上のサービスを提供する実行可能プロセスです。Oracle Tuxedo システムでは、サーバはクライアントとして動作するプロセスから継続的に要求を受け取り、それを適切なサービスに転送します。サービスは、アプリケーション用に記述された COBOL 言語コードのサブルーチンです。Oracle Tuxedo システムのトランザクション処理アプリケーションの機能性は、これらのサービスがリソース マネージャにアクセスすることによって実現されます。サービス ルーチンは、Oracle Tuxedo システム プログラマによって作成されなければならないアプリケーションの一部です。ユーザ定義のクライアントは、アプリケーションの別の部分に相当します。
すべての STOCKAPP サービスでは、アプリケーション トランザクション モニタ インタフェース (ATMI) の関数を使用して次の処理が行われます。
STOCKAPP には、4 つのサービスがあります。STOCKAPP の各サービスは、次に示すように、サーバのソース コードにある COBOL 関数名と一致します。
BUYSR
SELLSR
FUNDPRSR
FUNDUPSR
ここでは、STOCKAPP を実行するために必要なファイルやリソースを作成するための手順を順に示します。
STOCKAPP に必要な環境変数は、STKVAR ファイルに定義されています。このファイルは数多くのコメントが記述された大きな (約 100 行から構成される) ファイルです。
STKVAR ファイルの内容を確認します。9 行目のコードで、TUXDIR が設定されていることがわかります。設定されていない場合、ファイルの実行が失敗して、次のメッセージが表示されます。 TUXDIR: パラメータが null か、設定されていません。
TUXDIR パラメータに Oracle Tuxedo システムのディレクトリ構造でのルート ディレクトリを設定し、エクスポートします。STKVAR の別のコード行で APPDIR にディレクトリ {TUXDIR}/samples/atmi/STOCKAPP が設定されています。これは、STOCKAPP のソース ファイルが置かれたディレクトリです。APPDIR は、Oracle Tuxedo システムによって、アプリケーション固有のファイルが検索されるディレクトリです。オリジナルのソース ファイルを上書きしないように、STOCKAPP ファイルを別のディレクトリにコピーします。その場合、そのディレクトリを APPDIR に指定します。TUXDIR の下位ディレクトリである必要はありません。| 注意 : | STKVAR で指定されるほかの変数は、サンプル アプリケーションで各種の働きをします。独自のアプリケーションを開発する場合は、それらの働きについて認識しておくことが必要です。STKVAR には各種の変数が定義されているので、後で実際のアプリケーションのテンプレートとして使用できます。 |
STKVAR に必要な変更を加えたら、次のように STKVAR を実行します。. ./STKVAR
#ident "@(#)samples/atmi:STOCKAPP/STKVAR
#
# このファイルには、STOCKAPP を実行するために
# Tuxedo ソフトウェアで必要なすべての環境変数が設定されています。
#
# このディレクトリには、すべての Tuxedo ソフトウェアが置かれています。
# システム管理者はこの変数を設定する必要があります。
#
TUXDIR=${TUXDIR:?}
#
# このディレクトリには、ユーザ作成の全コードが置かれています。
#
# アプリケーション ジェネレータによって生成されたファイルが
# 置かれるディレクトリの絶対パス名です。
#
APPDIR=${HOME}/STOCKAPP
#
# tmloadcf で使用される環境ファイルです。
#
COBDIR=${COBDIR:?}
#
# このディレクトリには、コンパイルとリンクに必要な
# COBOL ファイルが置かれています。
#
LD_LIBRARY_PATH=$COBDIR/coblib:${LD_LIBRARY_PATH}
#
# coblib を LD_LIBRARY_PATH に追加します。
#
ENVFILE=${APPDIR}/ENVFILE
#
# CBLVIEWC、tmloadcf などで使用されるフィールド テーブル ファイルのリストです。
#
FIELDTBLS=fields,Usysflds
#
# フィールド テーブル ファイルを検索するディレクトリのリストです。
#
FLDTBLDIR=${TUXDIR}/udataobj:${APPDIR}
#
# トランザクション ログのデバイスを設定します。これは、
# UBBCBSHM ファイルの *MACHINES セクションにあるこのサイトの LMID の
# TLOGDEVICE パラメータと一致する必要があります。
#
TLOGDEVICE=${APPDIR}/TLOG
#
# コンフィグレーション ファイルのデバイスです。
#
UBBCBSHM=$APPDIR/UBBCBSHM
#
# /T にすべての情報を提供するバイナリ ファイルのデバイスです。
#
TUXCONFIG=${APPDIR}/TUXCONFIG
#
# 中央ユーザ ログを記録するファイルの接頭語を設定します。
# これは、UBBCONFIG ファイルの *MACHINES セクションにある
# このサイトの LMID の ULOGPFX パラメータと一致する必要があります。
#
ULOGPFX=${APPDIR}/ULOG
#
# VIEW ファイルを検索するディレクトリのリストです。
#
VIEWDIR=${APPDIR}
#
# CBLVIEWC、tmloadcf などで使用される VIEW ファイルのリストです。
#
VIEWFILES=quote.V,cust.V
#
# COBCPY を設定します。
#
COBCPY=$TUXDIR/cobinclude
#
# COBOPT を設定します。
#
COBOPT="-C ANS85 -C ALIGN=8 -C NOIBMCOMP -C TRUNC=ANSI -C OSEXT=cbl"
#
# CFLAGS を設定します。
#
CFLAGS="-I$TUXDIR/include -I$TUXDIR/sysinclude"
#
# 設定したすべての変数をエクスポートします。
#
export TUXDIR APPDIR ENVFILE
export FIELDTBLS FLDTBLDIR TLOGDEVICE
export UBBCBSHM TUXCONFIG ULOGPFX LD_LIBRARY_PATH
export VIEWDIR VIEWFILES COBDIR COBCPY COBOPT CFLAGS
#
# 設定されていない場合は、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
#
# 設定されていない場合は、COBDIR を PATH に追加します。
#
a="`echo $PATH | grep ${COBDIR}`"
if [ x"$a" = x ]
then
PATH=${PATH}:${COBDIR}
export PATH
fi
実行可能な ATMI サーバをビルドするには、buildserver を使用します。このコマンドではオプションを使用して、出力ファイル、アプリケーションで提供される入力ファイル、各種の方法で Oracle Tuxedo システム アプリケーションを実行するためのライブラリを指定します。
-C オプションを指定して buildserver を実行すると、cobcc コマンドが呼び出されます。環境変数の ALTCC を設定すると別のコンパイル コマンドを指定でき、ALTCFLAGS を設定するとコンパイル時と編集時にフラグを設定できます。buildserver のコマンドラインで指定できる主なオプションを以下の例に示します。
buildserver コマンドは STOCKAPP.mk で使用され、株式アプリケーションの各サーバをコンパイルしてビルドします。詳細については、『Tuxedo コマンド リファレンス』の「buildserver(1)」を参照してください。
BUYSELL ATMI サーバは、BUYSR および SELLSR 関数のコードが記述されたファイルから作成されています。BUYSELL サーバは、まず BUYSELL.o ファイルにコンパイルされ、次に buildserver コマンドに渡されます。そのため、コンパイル エラーを特定でき、サーバをビルドする前に修正することができます。
BUYSELL.o ファイルを作成します (STOCKAPP.mk で作成されます)。次のように、buildserver コマンドで BUYSELL サーバをビルドします。 buildserver -C -v -o BUYSELL -s SELLSR -f SELLSR.cbl -s BUYSR -f BUYSR.cbl
以下は、コマンドラインで指定されている各オプションの説明です。
-C オプションは、COBOL モジュールでサーバをビルドする場合に指定します。-v オプションは、冗長モードを使用する場合に指定します。その標準出力に cc コマンドが出力されます。-o オプションは、実行可能出力ファイルに名前を指定する場合に使用します。名前が指定されていない場合は、SERVER という名前が付きます。-s オプションは、サーバの起動時に宣言されるサーバのサービス名を指定します。サービスを実行する関数名がサービス名と異なる場合、関数名が -s オプションの引数の一部になります。STOCKAPP では、関数名はサービス名と同じなので、サービス名だけを指定します。サービス名では、すべての文字列を大文字で指定します。ただし、buildserver の -s オプションでは、サーバ内のサービスを処理する関数には任意の名前を付けることができます。詳細については、『Tuxedo コマンド リファレンス』の「buildserver(1)」を参照してください。システム管理者は、buildserver コマンドでサーバを作成した際に使用されたサービスのサブセットだけをサーバの起動時に利用できるように設定することもできます。詳細については、『Oracle Tuxedo アプリケーション実行時の管理』および『Oracle Tuxedo アプリケーションの設定』を参照してください。-f オプションは、リンク時と編集時に使用されるファイルを指定します。buildserver リファレンス ページの -l オプションも参照してください。この 2 つのオプションの詳細については、『COBOL を使用した Oracle Tuxedo アプリケーションのプログラミング』の「サーバのビルド」を参照してください。ファイルがリストされる順序には意味があります。この順序は、関数の参照、およびその参照がどのライブラリで解決されるかによって決定されます。ソース モジュールは、関数の参照が解決されるライブラリの前にリストされます。.cbl ファイルが存在する場合、それが最初にコンパイルされます。オブジェクト ファイルは、別個の .o ファイル、またはアーカイブ (.a) ファイルにあるファイル グループです。-f の引数として 1 つ以上のファイル名を指定する場合は、二重引用符で各ファイル名を囲む必要があります。-f オプションは、必要な数だけ使用できます。-s オプションは、BUYSELL サーバを構成するサービスとして、SELLSR および BUYSR を指定します。-o オプションは実行可能出力ファイルに BUYSELL という名前を付け、-f オプションは SELLSR.cbl および BUYSR.cbl ファイルがビルドでのリンク時と編集時に使用されることを指定します。
STOCKAPP サーバをビルドする場合、buildserver コマンドの指定方法を理解していることが大切です。ただし、実際にビルドする場合、makefile にビルドの定義を記述することがよくあります。STOCKAPP でもその方法が採用されています。
STOCKAPP には、すべてのスクリプトを実行可能にし、VIEW 記述ファイルをバイナリ形式に変換し、アプリケーション サーバの作成に必要なすべてのプリコンパイル、コンパイル、およびビルドを行う makefile が提供されています。また、最初からやり直す場合にもこのファイルを利用できます。
提供されている STOCKAPP.mk をそのまま使わずにフィールドを編集した方がよい場合があります。また、説明が必要なフィールドもあります。以下にそれらのフィールドについて説明します。
STOCKAPP.mk にある次のコメントと TUXDIR パラメータを確認します。
#
# Tuxedo システムのルート ディレクトリです。このファイルは、編集してこの値を正しく設定するか、
# または "make -f STOCKAPP.mk TUXDIR=/correct/rootdir" を使用して正しい値を渡します。
# そのようにしないと、STOCKAPP のビルドは失敗します。
#
TUXDIR=../..
TUXDIR パラメータには、Oracle Tuxedo システムがインストールされたルート ディレクトリの絶対パス名を指定します。
APPDIR パラメータに設定されている値を変更する場合があります。提供された STOCKAPP では、APPDIR には STOCKAPP ファイルが置かれたディレクトリ (TUXDIR の相対パス) が指定されています。次に示す STOCKAPP.mk のセクションには、APPDIR の設定についての説明と定義が記述されています。
#
# STOCKAPP アプリケーションのソース コードと実行可能ファイルが置かれたディレクトリです。
# このファイルは、編集してこの値を正しく設定するか、
# または "make -f STOCKAPP.mk APPDIR=/correct/appdir" を使用して正しい値を渡します。
# このようにしないと、STOCKAPP のビルドは失敗します。
#
APPDIR=$(TUXDIR)/samples/atmi/STOCKAPP
#
README ファイルに従って、別のディレクトリにファイルをコピーした場合、APPDIR にはファイルのコピー先のディレクトリを指定します。makefile を実行すると、そのディレクトリにアプリケーションがビルドされます。
STOCKAPP コンフィグレーション ファイルには、複数のコンピュータ上でアプリケーションを実行する方法が定義されています。STOCKAPP には、UBBCONFIG(5) で説明されているテキスト形式のコンフィグレーション ファイルが提供されています。UBBCBSHM には、単一のコンピュータ上のアプリケーションが定義されています。
STOCKAPP のコンフィグレーション ファイルの内容を確認します。#Copyright (c) 1992 Unix System Laboratories, Inc.
#All rights reserved
# Tuxedo COBOL サンプル アプリケーション用の UBBCONFIG スケルトン ファイルです。
*RESOURCES
IPCKEY 5226164
DOMAINID STOCKAPP
001 UID <id(1) からのユーザ ID>
002 GID <id(1) からのグループ ID>
MASTER SITE1
PERM 0660
MAXACCESSERS 20
MAXSERVERS 15
MAXSERVICES 30
MODEL SHM
LDBAL Y
MAXGTT 100
MAXBUFTYPE 16
MAXBUFSTYPE 32
SCANUNIT 10
SANITYSCAN 12
DBBLWAIT 6
BBLQUERY 180
BLOCKTIME 10
TAGENT “TAGENT"
#
*MACHINES
003 <SITE1 の名前> LMID=SITE1
004 TUXDIR="<TUXDIR1>"
005 APPDIR="<APPDIR1>"
ENVFILE="<APPDIR1>/ENVFILE"
TUXCONFIG="<APPDIR1>/TUXCONFIG"
TUXOFFSET=0
006 TYPE="<マシン タイプ>"
ULOGPFX="<APPDIR>/ULOG"
MAXWSCLIENTS=5
#
*GROUPS
COBAPI LMID=SITE1 GRPNO=1
#
#
*SERVERS
FUNDUPSR SRVGRP=COBAPI SRVID=1 CONV=Y ENVFILE="<APPDIR1>/ENVFILE"
FUNDPRSR SRVGRP=COBAPI SRVID=2 ENVFILE="<APPDIR1>/ENVFILE"
BUYSELL SRVGRP=COBAPI SRVID=3 ENVFILE="<APPDIR1>/ENVFILE"
#
#
*SERVICES
UBBCBSHM の RESOURCES セクションに追加します。SECURITY APP_PW
RESOURCES、MACHINES、および GROUPS セクションにあります。次の表は、山かっこで囲まれた文字列を置き換える値について説明しています。各文字列を適切な値に置き換えます。
バイナリ形式のコンフィグレーション ファイルを作成する場合、STOCKAPP ファイルが置かれたディレクトリに移動し、環境変数を設定することが必要です。その場合、次の手順に従います。
コンフィグレーション ファイルを編集したら、それを MASTER マシン上にバイナリ ファイルとしてロードする必要があります。バイナリ形式のコンフィグレーション ファイルの名前は TUXCONFIG、そのパス名は TUXCONFIG 環境変数に定義されています。このファイルは、Oracle Tuxedo のシステム管理者の有効なユーザ ID およびグループ ID を持つユーザが作成します。この 2 つの ID は、ご使用のコンフィグレーション ファイルの UID および GID の値と同じであることが必要です。同じではない場合、STOCKAPP の実行時にパーミッションの問題が発生します。
TUXCONFIG を作成します。 tmloadcf UBBCBSHM
コンフィグレーションのロード時には、このコンフィグレーションをインストールするかどうか、およびインストールする場合は既存のコンフィグレーション ファイルを上書きすることを確認するメッセージが何回か表示されます。このような確認を省くには、コマンドラインで -y オプションを指定します。
-c オプションを指定します。
TUXCONFIG は、MASTER マシン上だけにインストールできます。アプリケーションの起動時に tmboot によってほかのマシンに伝播されます。
コンフィグレーションのオプションとして SECURITY が指定されている場合、tmloadcf の実行時にアプリケーション パスワードの入力が求められます。30 文字までのパスワードを指定できます。アプリケーションに参加するクライアント プロセスでは、パスワードを入力する必要があります。
ロードする前に tmloadcf によってテキスト形式のコンフィグレーション ファイル (UBBCONFIG) が解析されます。構文エラーが検出された場合、ファイルのロードは失敗します。
ここでは、STOCKAPP を起動し、各種のクライアント プログラムとトランザクションを行ってテストし、終了する手順について順に説明します。
STOCKAPP を起動する前に、アプリケーションをサポートできるだけの IPC リソースがマシンにあることを確認します。IPC リソースに関するレポートを出力するには、tmboot コマンドに -c オプションを指定します。 IPC の大きさ変更 (/T の最小値のみ)
プロセッサごとの固定した最小値
SHMMIN: 1
SHMALL: 1
SEMMAP: SEMMNI
プロセッサごとの可変の最小値
SEMUME, A SHMMAX
SEMMNU, * *
ノード SEMMNS SEMMSL SEMMSL SEMMNI MSGMNI MSGMAP SHMSEG
------ ------ ------ ------ ------ ------ ------ ------
machine 1 60 1 60 A + 1 10 20 76K
machine 2 63 5 63 A + 1 11 22 76K
ここで 1 <= A <= 8 です。
MSGMNI 値に追加します。MSGMAP は MSGMNI の 2 倍にします。
このレポートは、コンフィグレーション内のすべてのサーバが起動するまで出力されます。起動したサーバの合計数が出力された時点でレポートは終了します。
必要に応じて、コンフィグレーションの一部のサーバだけを起動することもできます。たとえば、管理サーバだけを起動するには、-A オプションを指定します。オプションが指定されていない場合は、アプリケーション全体が起動します。
tmboot では、起動したサーバ数がレポートされるほかに、ULOG にメッセージが送信されます。
STOCKAPP を終了するには、次のように、引数を指定せずに tmshutdown(1) コマンドを MASTER マシンで入力します。
tmshutdown
このコマンド (または tmadmin の停止コマンド) を実行すると、次のタスクが行われます。
|