xmlfmlapp
は、クライアント・リクエストを使用して株式を照会および売買するサンプルATMI株式アプリケーションです。このアプリケーションでは、3つのサービスQUERY
、BUY
およびSELL
を単一のサーバーで実行します。これら3つのサービスは、C言語でコーディングされており、入出力にFML32バッファを使用できます。
このドキュメントでは、xmlfmlapp
アプリケーションを開発するための手順を順に示します。このチュートリアルでxmlfmlapp
の開発を経験すると、独自のアプリケーションを開発できるようになります。
xmlfmlapp
チュートリアルは、次の3つの項から構成されています。
注: | ここで説明する内容は、アプリケーションの開発、管理、プログラミングに経験のあるシステム・ユーザーを対象としています。また、Oracle Tuxedoシステム・ソフトウェアについて理解していることを前提としています。Oracle Tuxedoアプリケーションをビルドするには、開発ライセンスが必要です。 |
このサンプルでは、XMLからFML32への自動および手動変換機能を使用して、XercesパーサーAPIを使用せずにXMLデータを操作する方法について説明します。C言語で記述されたTuxedoクライアント/サーバー・アプリケーションでXercesパーサーAPIを使用するには、動的ライブラリをCPPで記述し、C言語プログラムで使用できるようにラップする必要があります(詳細は、「XMLSTOCKAPPとは」を参照してください)。XMLからFML32への手動および自動変換機能を使用すると、開発者はFML32バッファ・データを自由に操作できます。XMLからFML/FML32への手動および自動変換機能の詳細は、『Oracle Tuxedo C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「XMLデータとFML/FML32バッファ間の変換」を参照してください。
このサンプルでは、クライアントがリクエスト(照会や売買)を対応するサービスに送信します。クライアントは、XMLバッファを送受信します。サーバーと通信するため、3つのサービスすべてで「BUFTYPECONV=XML2FML32」パラメータを使用し、対応するサービスにリクエストを送信する前にXMLバッファをFML32に変換します。情報をクライアントに返す前に、このパラメータによってFML32バッファがXMLバッファに変換されます。サーバーでは、FML32データを直接処理します。
リクエスト側のXMLバッファでスキーマを使用してXMLドキュメントを検証することで、有効なデータのみが送信されます。
このサンプルのサーバーは、XMLドキュメントから株式情報を読み取り、これをtpxmltofml32(3c)関数を使用して直接FML32バッファに変換します。その後、リクエストされたFML32データに基づいてこのバッファから情報を取得し、必要なFML32データを返します。
ここでは、xmlfmlapp
アプリケーションを構成するファイル、クライアント、およびサービスについて説明します。それぞれの詳細は、次を参照してください。
xmlfmlapp
アプリケーションを構成するファイルは、samples/atmi/xmlfmlapp
ディレクトリに置かれています。xmlfmlapp
ディレクトリには次のファイルが含まれています。
Oracle TuxedoシステムのATMIクライアント/サーバー・アーキテクチャでは、通信に次の2つのモードがあります。
xmlfmlapp
では、次の3つのサービスを使用してリクエスト/レスポンス・モードを実装します。
stockclient.c
は、指定されたXMLファイルからの入力を使用するクライアント・プログラムです。QUERY
、BUY
およびSELL
サービスを呼び出し、実行結果を戻します。これは、次のように実行可能プログラムとして呼び出されます:
ATMIサーバーとは、1つ以上のサービスを提供する実行可能プロセスです。Oracle Tuxedoシステムでは、サーバーはクライアントとして動作するプロセスから継続的にリクエストを受け取り、それを適切なサービスにディスパッチします。Oracle Tuxedoシステムのトランザクション処理アプリケーションの機能性は、これらのサービスがリソース・マネージャにアクセスすることによって実現されます。サービス・ルーチンは、Oracle Tuxedoシステム・プログラマによって作成する必要のあるアプリケーションの一部です(ユーザー定義のクライアントは、アプリケーションの別の部分)。
xmlfmlapp
プログラムのQUERY
サービスでは、FML32バッファを使用できます。このサービスは、アプリケーション・トランザクション・モニター・インタフェース(ATMI)の関数を使用して株式情報を照会し、結果をFML32バッファでクライアントに返します。
xmlfmlapp
プログラムのBUY
サービスでは、FML32バッファを使用できます。このサービスは、アプリケーション・トランザクション・モニター・インタフェース(ATMI)の関数を使用して株式を購入します。
xmlfmlapp
プログラムのSELL
サービスでは、FML32バッファを使用できます。このサービスは、アプリケーション・トランザクション・モニター・インタフェース(ATMI)の関数を使用して株式を売却します。
ここでは、xmlfmlapp
を実行するために必要なファイルやリソースを作成するための手順を順に示します。
ファイルを編集したりサンプルを実行したりする前に、xmlfmlapp
ファイルを独自のディレクトリにコピーしておくことをお薦めします。
TUXDIR
が設定されていることを確認します。設定されていない場合、ファイルの実行が失敗して、次のメッセージが表示されます。 TUXDIR: parameter null or not set
TUXDIR
パラメータにOracle Tuxedoシステムのディレクトリ構造でのルート・ディレクトリを設定し、エクスポートします。APPDIR
を、xmlfmlapp
のソース・ファイルが置かれた{TUXDIR}/samples/atmi/xmlfmlapp
ディレクトリに設定します。APPDIR
は、Oracle Tuxedoシステムによって、アプリケーション固有のファイルが検索されるディレクトリです。オリジナルのソース・ファイルを上書きしないようにxmlfmlapp
ファイルを別のディレクトリにコピーした場合は、そのディレクトリを入力します。TUXDIR
の下位ディレクトリである必要はありません。. ./setenv.cmd
setenv.cmd
は、Windows用の実行可能ファイルです。UNIXシステムの場合はsetenv.sh
を使用します。
HP-UXとAIXの場合を除いて、LD_LIBRARY_PATH
には、共有ライブラリを使用するシステムの$TUXDIR/lib
が含まれている必要があります。
FML32フィールド表を作成するには、次のコマンドを使用します。
xmlfmlappバイナリ・ファイルをビルドするには、次のコマンドを使用します。
nmake -f make.nt
make -f make.mk
ubbsimpleサンプル構成ファイルを編集して、山かっこで囲まれた項目を実際のインストールに適した値に置き換える必要があります。TUXDIRおよびTUXCONFIG環境変数は構成ファイルの値と一致していなければなりません。
# (c) 2005 BEA Systems, Inc. All Rights Reserved.
#ident "@(#) samples/atmi/xmlfmlapp/ubbsimple $Revision: 1.3 $"
#Skeleton UBBCONFIG file for the TUXEDO Simple Application.
#Replace the <bracketed> items with the appropriate values.
*RESOURCES
IPCKEY <Replace with a valid IPC Key>
#Example:
#IPCKEY 123456
DOMAINID simpapp
MASTER simple
MAXACCESSERS 10
MAXSERVERS 5
MAXSERVICES 10
MODEL SHM
LDBAL N
*MACHINES
DEFAULT:
APPDIR="<Replace with the current directory pathname>"
TUXCONFIG="<Replace with your TUXCONFIG Pathname>"
TUXDIR="<Directory where TUXEDO is installed>"
#Example:
# APPDIR="/home/me/simpapp"
# TUXCONFIG="/home/me/simpapp/tuxconfig"
# TUXDIR="/usr/tuxedo"
<Machine-name> LMID=simple
#Example:
#beatux LMID=simple
*GROUPS
GROUP1
LMID=simple GRPNO=1 OPENINFO=NONE
*SERVERS
DEFAULT:
CLOPT="-A"
stockserver SRVGRP=GROUP1 SRVID=1
*SERVICES
QUERY BUFTYPECONV=XML2FML32
BUY BUFTYPECONV=XML2FML32
SELL BUFTYPECONV=XML2FML32
注: | 山カッコで囲まれた各文字列<string> を適切な値に置き換えます。 |
バイナリ形式の構成ファイルを作成する場合、xmlfmlapp
ファイルが置かれたディレクトリに移動し、環境変数を設定することが必要です。その場合、次の手順に従います。
構成ファイルを編集したら、それをMASTER
マシン上にバイナリ・ファイルとしてロードする必要があります。バイナリ形式の構成ファイルの名前はTUXCONFIG
、そのパス名はTUXCONFIG
環境変数に定義されています。このファイルは、Oracle Tuxedoのシステム管理者の有効なユーザーIDおよびグループIDを持つユーザーが作成し、この2つのIDは、ご使用の構成ファイルのUID
およびGID
の値と同じであることが必要です。この要件が満たされない場合、xmlfmlapp
の実行時に権限の問題が発生します。
TUXCONFIG
を作成します。 tmloadcf ubbsimple
構成のロード時には、この構成をインストールするかどうか、およびインストールする場合は既存の構成ファイルを上書きすることを確認するメッセージが何回か表示されます。このような確認を省くには、コマンド行で-y
オプションを指定します。
-c
オプションを指定します。 TUXCONFIG
は、MASTER
マシン上だけにインストールできます。アプリケーションの起動時にtmboot
によってほかのマシンに伝播されます。
ロードする前にtmloadcf
によってテキスト形式の構成ファイル(UBBCONFIG
)が解析されます。構文エラーが検出された場合、ファイルのロードは失敗します。
ここでは、xmlfmlapp
を起動し、様々な引数でクライアント・プログラムを実行してテストし、終了する手順について順に説明します。
xmlfmlapp
を起動する前に、アプリケーションをサポートするのに十分なIPCリソースがマシンにあることを確認します。IPCリソースに関するレポートを出力するには、tmboot
コマンドに-c
オプションを指定します。
必要であれば、構成の一部のサーバーだけを起動することもできます。たとえば、管理サーバーだけを起動するには、-A
オプションを指定します。オプションが指定されていない場合は、アプリケーション全体が起動します。
xmlfmlapp
を終了するには、次のように、引数を指定せずにtmshutdown(1)
コマンドをMASTER
マシンで入力します。
tmshutdown -y
このコマンド(またはtmadmin
の停止コマンド)を実行すると、次のタスクが行われます。