|
XMLSTOCKAPPは、Oracle Tuxedoシステム・ソフトウェアに同梱されている株式売買のATMIサンプル・アプリケーションです。このアプリケーションでは、単一のマシン上にある2つのサーバーを実行し、CおよびC++ Tuxedoサーバーからのパーサーの呼出しとXMLバッファのルーティングを説明します。片方のサーバーはC++で記述されたTuxedoサーバー(stockxml)、もう一方のサーバーはCで記述されています(stockxml_c)。2つのサーバーは同じSTOCKQUOTEサービスを提供します。クライアントはサービスを呼び出し、株価を戻し、次にXMLバッファを出力します。
このドキュメントでは、XMLSTOCKAPPアプリケーションを開発するための手順を順に示します。このチュートリアルでXMLSTOCKAPPの開発を経験すると、独自のアプリケーションを開発できるようになります。
XMLSTOCKAPPチュートリアルは、次の3つの項から構成されています。
| 注: | ここで説明する内容は、アプリケーションの開発、管理、プログラミングに経験のあるシステム・ユーザーを対象としています。また、Oracle Tuxedoシステム・ソフトウェアについて理解していることを前提としています。Oracle Tuxedoアプリケーションをビルドするには、開発ライセンスが必要です。 |
ここでは、XMLSTOCKAPPアプリケーションを構成するファイル、クライアント、およびサービスについて説明します。それぞれの詳細は、次を参照してください。
XMLSTOCKAPPアプリケーションを構成するファイルは、samples/atmi/xmlstockappディレクトリに置かれています。このサンプルに用意されているファイルは、次のとおりです。
XMLSTOCKAPPディレクトリには、次のファイルが置かれています。
Oracle TuxedoシステムのATMIクライアント/サーバー・アーキテクチャでは、通信に次の2つのモードがあります。
XMLSTOCKAPPではリクエスト/レスポンス・モードを実装し、STOCKQUOTEサービスを使用して株価をリクエストします。
Client.cppはXMLファイル、stock_quote_beas.xmlまたはstock_quote_msft.xmlからの入力を使用するクライアント・プログラムです。STOCKQUOTEサービスを呼び出す問合せを行い、BEASまたはMSFTの株価を戻します。これは、次のように実行可能プログラムとして呼び出されます:
Client stock_quote_beas.xml
Client stock_quote_msft.xml
ATMIサーバーとは、1つ以上のサービスを提供する実行可能プロセスです。Oracle Tuxedoシステムでは、サーバーはクライアントとして動作するプロセスから継続的にリクエストを受け取り、それを適切なサービスにディスパッチします。Oracle Tuxedoシステムのトランザクション処理アプリケーションの機能性は、これらのサービスがリソース・マネージャにアクセスすることによって実現されます。サービス・ルーチンは、Oracle Tuxedoシステム・プログラマによって作成する必要のあるアプリケーションの一部です(ユーザー定義のクライアントは、アプリケーションの別の部分)。
XMLSTOCKAPPプログラムのSTOCKQUOTEサービスは、アプリケーション・トランザクション・モニター・インタフェース(ATMI)で提供される機能を使用して、クライアントにXMLバッファとして株価を返します。
ここでは、XMLSTOCKAPPを実行するために必要なファイルやリソースを作成するための手順を順に示します。
ファイルを編集したりサンプルを実行したりする前に、XMLSTOCKAPPファイルを独自のディレクトリにコピーしておくことをお薦めします。
TUXDIRが設定されていることを確認します。設定されていない場合、ファイルの実行が失敗して、次のメッセージが表示されます。 TUXDIR: parameter null or not set
TUXDIRパラメータにOracle Tuxedoシステムのディレクトリ構造でのルート・ディレクトリを設定し、エクスポートします。APPDIRを、XMLSTOCKAPPのソース・ファイルが置かれた{TUXDIR}/samples/atmi/XMLSTOCKAPPディレクトリに設定します。APPDIRは、Oracle Tuxedoシステムによって、アプリケーション固有のファイルが検索されるディレクトリです。オリジナルのソース・ファイルを上書きしないようにXMLSTOCKAPPファイルを別のディレクトリにコピーした場合は、そのディレクトリを入力します。TUXDIRの下位ディレクトリである必要はありません。. ./<VARFILE>
HP-UXとAIXの場合を除いて、LD_LIBRARY_PATHには、共有ライブラリを使用するシステムの$TUXDIR/libが含まれている必要があります。
export CFLAGS=-I
特定のオペレーティング・システムの場合は、次のコマンドを使用します。
buildclient -o Client -f Client.cpp -f SAXPrint.cpp -f SAXPrintHandlers.cpp -f -ltxml
XMLSTOCKAPPサンプルには2つのサーバーが用意されています。ただし、このサンプルのサーバーをビルドするには、READMEファイルの指示に従う必要があります。
実行可能なATMIサーバーをビルドするには、buildserverを使用します。このコマンドではオプションを使用して、出力ファイル、アプリケーションで提供される入力ファイル、各種の方法でOracle Tuxedoシステム・アプリケーションを実行するためのライブラリを指定します。
buildserverのコマンド行で指定できる主なオプションを次の例に示します。
buildserverコマンドは.mkで使用され、株式アプリケーションの各サーバーをコンパイルしてビルドします。(詳細は、『Oracle Oracle Tuxedoコマンド・リファレンス』の「buildserver(1)」を参照してください。)
次のように、buildserverコマンドでstockxmlサーバーとstockxml_cサーバーをビルドします。
buildserver -s STOCKQUOTE -o stockxml -f stockxml.cpp -f DOMTreeErrorReporter.cpp -f -ltxml
buildserver -s STOCKQUOTE -f stockxml_c.c -o stockxml_c -f xmlWrapper.cpp -f DOMTreeErrorReporter.cpp -f -ltxml
-oオプションは、実行可能出力ファイルに名前を指定する場合に使用します。名前が指定されていない場合は、SERVERという名前が付きます。-sオプションは、サーバーの起動時に通知されるサーバーのサービス名を指定します。サービスを実行する関数名がサービス名と異なる場合、関数名が-sオプションの引数の一部になります。XMLSTOCKAPPでは、関数名はサービス名と同じなので、サービス名のみを指定します。サービス名では、すべての文字列を大文字で指定します。ただし、buildserverの-sオプションでは、サーバー内のサービスを処理する関数には任意の名前を指定できます。詳細は、『Oracle Tuxedoコマンド・リファレンス』の「buildserver(1)」を参照してください。システム管理者は、buildserverコマンドでサーバーを作成する際に使用されたサービスのサブセットのみをサーバーの起動時に利用できるように設定することもできます。詳細は、『Oracle Tuxedoアプリケーション実行時の管理』および『Oracle Tuxedoアプリケーションの設定』を参照してください。-fオプションは、リンク編集時に使用されるファイルを指定します。buildserverリファレンス・ページの-lオプションも参照してください。ファイルがリストされる順序には意味があります。この順序は、関数の参照、およびその参照がどのライブラリで解決されるかによって決まります。ソース・モジュールは、それらの参照を解決するために使用されるライブラリの前にリストされます。オブジェクト・ファイルは、別個の.oファイル、またはアーカイブ(.a)ファイルにあるファイル・グループです。-fの引数として1つ以上のファイル名を指定する場合は、二重引用符でファイル名のリストを囲む必要があります。-fオプションは、必要な数だけ使用できます。-sオプションは、stockxmlおよびstockxml_cサーバーを構成するサービスとしてSTOCKQUOTEサービスを指定します。-oオプションは実行可能出力ファイルにstockxmlおよびstockxml_cという名前を付け、-fオプションはstockxml.cpp、DOMTreeErrorReporter.cppおよびxmlWrapper.cppファイルがビルドでのリンク編集時に使用されるように指定します。ubbsimpleサンプル構成ファイルを編集して、山かっこで囲まれた項目を実際のインストールに適した値に置き換える必要があります。TUXDIRおよびTUXCONFIG環境変数は構成ファイルの値と一致していなければなりません。
1$
2
3 #Skeleton UBBCONFIG file for the BEA Tuxedo Simple Application.
4 #Replace the <bracketed> items with the appropriate values.
5 RESOURCES
6 IPCKEY <Replace with valid IPC Key greater than 32,768>
7
8 #Example:
9
10 #IPCKEY 62345
11
12 MASTER simple
13 MAXACCESSERS 5
14 MAXSERVERS 5
15 MAXSERVICES 10
16 MODEL SHM
17 LDBAL N
18
19 *MACHINES
20
21 DEFAULT:
22
23 APPDIR="<Replace with the current pathname>"
24 TUXCONFIG="<Replace with TUXCONFIG Pathname>"
25 TUXDIR="<Root directory of Tuxedo (not /)>"
26 #Example:
27 # APPDIR="/usr/me/simpdir"
28 # TUXCONFIG="/usr/me/simpdir/tuxconfig"
29 # TUXDIR="/usr/tuxedo"
30
31 <Machine-name> LMID=simple
32 #Example:
33 #tuxmach LMID=simple
34 *GROUPS
35 GROUP1
36 LMID=simple GRPNO=1 OPENINFO=NONE
37
38 *SERVERS
39 DEFAULT:
40 CLOPT="-A"
41 stockxml SRVGRP=GROUP1 SRVID=1
42 stockxml_c SRVGRP=GROUP1 SRVID=1
43 *SERVICES
44 STOCKQUOTE
バイナリ形式の構成ファイルを作成する場合、XMLSTOCKAPPファイルが置かれたディレクトリに移動し、環境変数を設定することが必要です。その場合、次の手順に従います。
構成ファイルを編集したら、それをMASTERマシン上にバイナリ・ファイルとしてロードする必要があります。バイナリ形式の構成ファイルの名前はTUXCONFIG、そのパス名はTUXCONFIG環境変数に定義されています。このファイルは、Oracle Tuxedoのシステム管理者の有効なユーザーIDおよびグループIDを持つユーザーが作成し、この2つのIDは、ご使用の構成ファイルのUIDおよびGIDの値と同じであることが必要です。この要件が満たされていない場合、XMLSTOCKAPPの実行時に権限の問題が発生します。
TUXCONFIGを作成します。 tmloadcf ubbsimple 構成のロード時には、この構成をインストールするかどうか、およびインストールする場合は既存の構成ファイルを上書きすることを確認するメッセージが何回か表示されます。このような確認を省くには、コマンド行で-yオプションを指定します。
-cオプションを指定します。 TUXCONFIGは、MASTERマシン上だけにインストールできます。アプリケーションの起動時にtmbootによってほかのマシンに伝播されます。
ロードする前にtmloadcfによってテキスト形式の構成ファイル(UBBCONFIG)が解析されます。構文エラーが検出された場合、ファイルのロードは失敗します。
ここでは、XMLSTOCKAPPを起動し、各種のクライアント・プログラムとトランザクションを行ってテストし、終了する手順について順に説明します。
XMLSTOCKAPPを起動する前に、アプリケーションをサポートするのに十分なIPCリソースがマシンにあることを確認します。IPCリソースに関するレポートを出力するには、tmbootコマンドに-cオプションを指定します。
このレポートは、構成内のすべてのサーバーが起動するまで出力されます。起動したサーバーの合計数が出力された時点でレポートは終了します。
必要であれば、構成の一部のサーバーだけを起動することもできます。たとえば、管理サーバーだけを起動するには、-Aオプションを指定します。オプションが指定されていない場合は、アプリケーション全体が起動します。
tmbootでは、起動したサーバー数がレポートされるほかに、ULOGにメッセージが送信されます。
XMLSTOCKAPPを終了するには、次のように、引数を指定せずにtmshutdown(1)コマンドをMASTERマシンで入力します。
tmshutdown -y
このコマンド(またはtmadminの停止コマンド)を実行すると、次のタスクが行われます。
|