xmlfmlapp (完全なC XML/FML32変換アプリケーション)のチュートリアル
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ディレクトリには次のファイルが含まれています。
•
|
サービスが使用する株式情報を格納する1つの.xmlファイル: stock.xml
|
•
|
1つのFML32フィールド定義ファイル: stockflds
|
•
|
XML入力ファイルを検証するための1つの.xmlスキーマ・ファイル: stock_operate.xsd
|
Oracle TuxedoシステムのATMIクライアント/サーバー・アーキテクチャでは、通信に次の2つのモードがあります。
•
|
リクエスト/レスポンス・モード。サーバーが実行する1つのサービス・リクエストを送り、1つのレスポンスを受け取ります。
|
•
|
会話モード。クライアント(またはクライアントとして動作するサーバー)とサーバー間に専用の接続が確立されます。終了するまで、この接続はアクティブになったままです。接続がアクティブであるかぎり、参加している2つのプロセス間で、サービスに対するリクエストとレスポンスをそれぞれ含むメッセージをやり取りできます。
|
xmlfmlappでは、次の3つのサービスを使用してリクエスト/レスポンス・モードを実装します。
stockclient.cは、指定されたXMLファイルからの入力を使用するクライアント・プログラムです。
QUERY、
BUYおよび
SELLサービスを呼び出し、実行結果を戻します。これは、次のように実行可能プログラムとして呼び出されます:
•
|
stockclient stock_query_bea.xml
|
•
|
stockclient stock_buy_bea.xml
|
•
|
stockclient stock_query_msft.xml
|
•
|
stockclient stock_sell_msft.xml
|
•
|
『Oracle Tuxedo ATMIの紹介』の ATMIの使用に関する項
|
•
|
『Oracle Tuxedo ATMIの紹介』の 型付きバッファに関する項
|
•
|
『Oracle Tuxedoコマンド・リファレンス』および『Oracle Tuxedo ATMI C言語関数リファレンス』 のATMIコマンドおよび関数
|
ATMIサーバーとは、1つ以上のサービスを提供する実行可能プロセスです。Oracle Tuxedoシステムでは、サーバーはクライアントとして動作するプロセスから継続的にリクエストを受け取り、それを適切なサービスにディスパッチします。Oracle Tuxedoシステムのトランザクション処理アプリケーションの機能性は、これらのサービスがリソース・マネージャにアクセスすることによって実現されます。サービス・ルーチンは、Oracle Tuxedoシステム・プログラマによって作成する必要のあるアプリケーションの一部です(ユーザー定義のクライアントは、アプリケーションの別の部分)。
xmlfmlappプログラムの
QUERYサービスでは、FML32バッファを使用できます。このサービスは、アプリケーション・トランザクション・モニター・インタフェース(ATMI)の関数を使用して株式情報を照会し、結果をFML32バッファでクライアントに返します。
xmlfmlappプログラムの
BUYサービスでは、FML32バッファを使用できます。このサービスは、アプリケーション・トランザクション・モニター・インタフェース(ATMI)の関数を使用して株式を購入します。
xmlfmlappプログラムの
SELLサービスでは、FML32バッファを使用できます。このサービスは、アプリケーション・トランザクション・モニター・インタフェース(ATMI)の関数を使用して株式を売却します。
ここでは、
xmlfmlappを実行するために必要なファイルやリソースを作成するための手順を順に示します。
ステップ1 :新しいディレクトリへのxmlfmlappファイルのコピー
ファイルを編集したりサンプルを実行したりする前に、
xmlfmlappファイルを独自のディレクトリにコピーしておくことをお薦めします。
1.
|
TUXDIRが設定されていることを確認します。設定されていない場合、ファイルの実行が失敗して、次のメッセージが表示されます。
|
2.
|
TUXDIRパラメータにOracle Tuxedoシステムのディレクトリ構造でのルート・ディレクトリを設定し、エクスポートします。
|
3.
|
APPDIRを、 xmlfmlappのソース・ファイルが置かれた {TUXDIR}/samples/atmi/xmlfmlappディレクトリに設定します。 APPDIRは、Oracle Tuxedoシステムによって、アプリケーション固有のファイルが検索されるディレクトリです。オリジナルのソース・ファイルを上書きしないように xmlfmlappファイルを別のディレクトリにコピーした場合は、そのディレクトリを入力します。 TUXDIRの下位ディレクトリである必要はありません。
|
4.
|
環境変数ファイルに必要な変更を加えたら、次のように実行します。
|
setenv.cmdは、Windows用の実行可能ファイルです。UNIXシステムの場合は
setenv.shを使用します。
HP-UXとAIXの場合を除いて、LD_LIBRARY_PATHには、共有ライブラリを使用するシステムの
$TUXDIR/libが含まれている必要があります。
•
|
AIXの場合、 LD_LIBRARY_PATHではなく LIBPATHを設定します。
|
•
|
HP-UXの場合、 LD_LIBRARY_PATHではなく SHLIB_PATHを設定します。
|
•
|
オペレーティング・システムがSun Solarisの場合、 PATHの先頭で /usr/5binを指定する必要があります。次のコマンドを使用します。
|
PATH=/usr/5bin:$PATH;export PATH
シェルとしては、
cshではなく
/bin/shを使用します。
FML32フィールド表を作成するには、次のコマンドを使用します。
ステップ4 : xmlfmlappバイナリのビルド
xmlfmlappバイナリ・ファイルをビルドするには、次のコマンドを使用します。
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ファイルが置かれたディレクトリに移動し、環境変数を設定することが必要です。その場合、次の手順に従います。
1.
|
xmlfmlappファイルが置かれたディレクトリに移動します。
|
setenv.cmdは、Windows用の実行可能ファイルです。UNIXシステムの場合は
setenv.shを使用します。
構成ファイルを編集したら、それを
MASTERマシン上にバイナリ・ファイルとしてロードする必要があります。バイナリ形式の構成ファイルの名前は
TUXCONFIG、そのパス名は
TUXCONFIG環境変数に定義されています。このファイルは、Oracle Tuxedoのシステム管理者の有効なユーザーIDおよびグループIDを持つユーザーが作成し、この2つのIDは、ご使用の構成ファイルの
UIDおよび
GIDの値と同じであることが必要です。この要件が満たされない場合、
xmlfmlappの実行時に権限の問題が発生します。
1.
|
次のコマンドを入力して、 TUXCONFIGを作成します。
|
構成のロード時には、この構成をインストールするかどうか、およびインストールする場合は既存の構成ファイルを上書きすることを確認するメッセージが何回か表示されます。このような確認を省くには、コマンド行で
-yオプションを指定します。
2.
|
アプリケーションで必要なIPCリソースをOracle Tuxedoシステムで計算する場合は、コマンド行で -cオプションを指定します。
|
TUXCONFIGは、
MASTERマシン上だけにインストールできます。アプリケーションの起動時に
tmbootによってほかのマシンに伝播されます。
ロードする前にtmloadcfによってテキスト形式の構成ファイル(
UBBCONFIG)が解析されます。構文エラーが検出された場合、ファイルのロードは失敗します。
ここでは、
xmlfmlappを起動し、様々な引数でクライアント・プログラムを実行してテストし、終了する手順について順に説明します。
xmlfmlappを起動する前に、アプリケーションをサポートするのに十分なIPCリソースがマシンにあることを確認します。IPCリソースに関するレポートを出力するには、
tmbootコマンドに
-cオプションを指定します。
2.
|
次のコマンドを入力して、アプリケーションを起動します。
|
必要であれば、構成の一部のサーバーだけを起動することもできます。たとえば、管理サーバーだけを起動するには、
-Aオプションを指定します。オプションが指定されていない場合は、アプリケーション全体が起動します。
ステップ3 : xmlfmlappサービスのテスト
1.
|
システムにログインするたびに、 xmlfmlappに環境変数を設定する必要があります。その場合、次のコマンドを入力します。
|
2.
|
クライアント・プログラムを実行します。クライアント・プログラムを実行するには、次のコマンドを入力します。
|
stockclient stock_query_bea.xml
stockclient stock_query_msft.xml
stockclient stock_buy_bea.xml
stockclient stock_sell_msft.xml
xmlfmlappを終了するには、次のように、引数を指定せずに
tmshutdown(1)コマンドを
MASTERマシンで入力します。
このコマンド(または
tmadminの停止コマンド)を実行すると、次のタスクが行われます。
•
|
すべてのアプリケーション・サーバー、ゲートウェイ・サーバー、TMSサーバー、および管理サーバーが停止します。
|
•
|
割り当てられていたすべてのIPCリソースが削除されます。
|