目次 前 次 PDF


PersonQueryサンプル・アプリケーション

PersonQueryサンプル・アプリケーション
Oracle Tuxedoソフトウェアに同梱されたインターセプタ例を理解して使用するには、PersonQueryサンプル・アプリケーションをビルドして実行する必要があります。PersonQueryサンプル・アプリケーション自体には、インターセプタは含まれていません。しかし、このアプリケーションは、以降の3つの章で説明するインターセプタのサンプル・アプリケーションの基本として使用されます。
このトピックには次の項が含まれます:
注意:
Oracle Tuxedo CORBA JavaクライアントとOracle Tuxedo CORBA JavaクライアントORBはTuxedo 8.1で非推奨になり、サポートされなくなりました。すべてのOracle Tuxedo CORBA JavaクライアントおよびOracle Tuxedo CORBA JavaクライアントORBのテキスト・リファレンスとコード・サンプルは、サード・パーティのJava ORBライブラリを実装または実行する際の参考や、プログラマの参照用としてのみ使用してください。
サード・パーティのCORBA Java ORBのテクニカル・サポートは、各ベンダーによって提供されます。Oracle Tuxedoでは、サード・パーティのCORBA Java ORBに関する技術的なサポートまたはドキュメントは提供していません。
PersonQueryサンプル・アプリケーションのしくみ
PersonQueryサンプル・アプリケーションは、単純なデータベース問合せインタフェースを実装します。PersonQueryアプリケーションを使用すると、データベースから次のような特定の検索基準に一致する人物の情報を取得できます。
年齢、体重、髪の色、目の色、肌の色などの身体的特性
名前、住所、その他の詳細情報
PersonQueryアプリケーションには、次のコンポーネントが含まれます。
様々なデータ型をパラメータとして含むリクエストを発行する、クライアント・アプリケーション。クライアント・アプリケーションは特定の形式でユーザーからのコマンド行の入力を受け付け、サンプル・インタフェースに従って入力をパッケージ化し、適切なリクエストを送信します。
クライアント・アプリケーションは、サーバーからの問合せ結果を受け取ると、見つかった項目の数を報告します。ユーザーは次に、最新の問合せ結果を表示するコマンドを入力するか、新しい問合せを指定します。
単純な組込みデータベースを含むサーバー・アプリケーション。サーバー・アプリケーションは、データベースにアクセスしてクライアント・リクエストを処理します。
PersonQueryデータベース
サーバー・アプリケーションのPersonQueryデータベースには、データベース内の各人物に関する次の情報が含まれます。
名前
住所
米国社会保障番号
性別
年齢
配偶者の有無
趣味
生年月日
身長
体重
髪の色
肌の色
目の色
その他の身体的特性
クライアント・アプリケーションのコマンド行インタフェース
PersonQueryサンプル・アプリケーションは、ユーザーがデータベース問合せコマンド、およびアプリケーション終了コマンドを入力できるクライアント・コンポーネントの単純なコマンド行インタフェースを実装します。
データベース問合せコマンドの構文は次のとおりです。
Option? command [keyword] [command [keyword]]...
このコマンド構文の詳細は以下のとおりです。
Option?はPersonQueryコマンド・プロンプトです。
commandは、表4-1に示すPersonQueryコマンドの1つです。
keywordは、表4-1に示すキーワードの1つです。キーワードの指定にあたっては、次のルールに留意してください。
通常nameコマンドやaddressコマンドについて指定される複合キーワードは、次のコマンドのように、スペースで区切って二重引用符("")で囲む必要があります。
Option? name "Thomas Mann"
アドレスを指定する場合は、次のコマンドのように、通りの名前、都市名、州または地区名、国名など住所の構成要素を、常にカンマで区切ります。
Option? address "116 Einbahnstrasse, Frankfurt am Main, BRD"
表4-1のように1行に複数のコマンドを指定できます。
Option? hair brown eyes blue
 
表4-1 PersonQueryアプリケーションのコマンドおよびキーワード
コマンド
キーワード
説明
name
"firstname lastname"
名前による問合せ。スペースの入った文字列は引用符で囲む必要があります。
address
"number street, city..."
住所による問合せ。スペースの入った文字列は引用符で囲む必要があります。住所の構成要素は番地、通りの名前、都市名、州名、および国名です。通り、都市、州、および国は、カンマで区切る必要があります。
ss
xxx-xx-xxxx
米国社会保障番号による問合せ。キーワードは、xxx-xx-xxxxの形式にする必要があります。
sex
sex
性別による問合せ。選択肢は、malefemale、およびcant_tellです。
age
age
年齢による問合せ。
marriage
status
配偶者の有無による問合せ。選択肢は、marriedsingledivorced、およびnot_knownです。
hobby
hobby
趣味による問合せ。選択肢は、who_caresrocksswimtvstampsphoto、およびweavingです。
dob
mm/dd/yyyy
日付による問合せ。キーワードは、mm/dd/yyyyの形式にする必要があります。
height
inches
身長による問合せ。単位はインチです。
weight
pounds
体重による問合せ。単位はポンドです。
hair
color
髪の色による問合せ。選択肢はwhite、black、red、brown、green、yellow、blue、gray、およびunknownです。
skin
color
肌の色による問合せ。選択肢はwhite、black、brown、yellow、green、およびredです。
eyes
color
目の色による問合せ。選択肢はblue、brown、gray、green、violet、black、およびhazelです。
other
feature
その他の身体的特性による問合せ。選択肢はtattoo、limb (手足の欠如)、scar、およびnoneです。
result
 
最新の問合せの出力結果を表示します。
exit
 
提供されたサービスに対する課金を表示してアプリケーションを終了します。
PersonQueryサンプル・アプリケーションのOMG IDL
リスト4-1は、PersonQueryサンプル・アプリケーションで実装されているOMG IDLコードを示します。
リスト4-1 PersonQueryアプリケーションのインタフェース用OMG IDLコード
#pragma prefix ���beasys.com���

interface PersonQuery
{
       enum MONTHS {Empty,Jan, Feb, Mar, Apr, May, Jun, Jul, Aug,
                     Sep, Oct, Nov, Dec};
       struct date_ {
                      MONTHS Month;
                      short Day;
                      short Year;
                  };
       typedef date_ Date;
       struct addr_ {
              short number;
              string street;
              string town;
              string state;
              string country;
       };
       typedef addr_ Address;
       enum MARRIAGE {not_known, single, married, divorced};
       enum HOBBIES {who_cares, rocks, swim, tv, stamps, photo,
                     weaving};
       enum SEX {cant_tell, male, female};
       enum COLOR {white, black, brown, yellow, red, green, blue,
                   gray, violet, hazel, unknown, dontcare};
       enum MARKINGS {dont_care, tattoo, scar, missing_limb,
                      none};
       struct person_ {
              string        name;
              Address       addr;
              string        ss;
              SEX           sex;
              short         age;
              MARRIAGE      mar;
              HOBBIES       rec;
              Date          dob;
              short         ht;
              long          wt;
              COLOR         hair;
              COLOR         eye;
              COLOR         skin;
              MARKINGS      other;
       };
typedef person_ Person;
        typedef sequence <Person> Possibles;
        union reason_ switch (short)
                {
                case 0:      string      name;
                case 1:      Address     addr;
                case 2:      string      ss;
                case 3:      SEX         sex;
                case 4:      short       age;
                case 5:      MARRIAGE    mar;
                case 6:      HOBBIES     rec;
                case 7:      Date        dob;
                case 8:      short       ht;
                case 9:      long        wt;
                case 10:     COLOR       hair;
                case 11:     COLOR       eyes;
                case 12:     COLOR       skin;
                case 13:     MARKINGS    other;
       };
       typedef reason_ Reason;

       exception DataOutOfRange
       {
              Reason why;
       };
      boolean findPerson (
                in Person who, out Possibles hits)
                raises (DataOutOfRange);
      boolean findPersonByName (
                in string name, out Possibles hits)
                raises (DataOutOfRange);
      boolean findPersonByAddress (
                in Address addr, out Possibles hits)
                raises (DataOutOfRange);
      boolean findPersonBySS (
                in string ss, out Possibles hits)
                raises (DataOutOfRange);
      boolean findPersonByAge (
                in short age, out Possibles hits)
                raises (DataOutOfRange);
      boolean findPersonByMarriage (
                in MARRIAGE mar, out Possibles hits)
                raises (DataOutOfRange);
      boolean findPersonByHobbies (
                in HOBBIES rec, out Possibles hits)
                raises (DataOutOfRange);
      boolean findPersonBydob (
                in Date dob, out Possibles hits)
                raises (DataOutOfRange);
      boolean findPersonByHeight (
                in short ht, out Possibles hits)
                raises (DataOutOfRange);
      boolean findPersonByWeight (
                in long wt, out Possibles hits)
                raises (DataOutOfRange);
      boolean findPersonByHairColor (
                in COLOR col, out Possibles hits)
                raises (DataOutOfRange);
      boolean findPersonBySkinColor (
                in COLOR col, out Possibles hits)
                raises (DataOutOfRange);
      boolean findPersonByEyeColor (
                in COLOR col, out Possibles hits)
                raises (DataOutOfRange);
      boolean findPersonByOther (
                in MARKINGS other, out Possibles hits)
                raises (DataOutOfRange);
      void      exit();
};
interface QueryFactory
{
      PersonQuery createQuery (in string name);
};
 
PersonQueryサンプル・アプリケーションのビルドと実行
PersonQueryサンプル・アプリケーションをビルドして実行するには、以下の手順に従います。
1.
PersonQueryサンプル・アプリケーションのファイルを作業ディレクトリにコピーします。
2.
PersonQueryサンプル・アプリケーションのファイルの保護を変更します。
3.
環境変数を設定します。
4.
CORBAクライアントおよびサーバーのサンプル・アプリケーションをビルドします。
5.
PersonQueryクライアントおよびサーバー・アプリケーションを起動します。
6.
クライアント・アプリケーションを使用して、サーバー上のデータベースを検索するためのいくつかのコマンドを入力します。
7.
PersonQueryサンプル・アプリケーションを停止します。
PersonQueryサンプル・アプリケーション用ファイルのコピー
リクエスト・レベルのインターセプタのサンプル・アプリケーション用ファイルは、次のディレクトリに格納されています。
$TUXDIR\samples\corba\interceptors_cxx
これらのファイルをビルドおよび実行できるようにコピーするには、次の手順に従います。
1.
サンプル・ファイルのコピー先となる作業ディレクトリを作成します。
2.
1つ前の手順で作成した作業ディレクトリにinterceptors_cxxサンプルをコピーします。
Windows 2003
> xcopy /s/i %TUXDIR%\samples\corba\interceptors_cxx <workdirectory>\cxx
UNIX
> cp -R $TUXDIR/samples/corba/interceptors_cxx <workdirectory>/cxx
3.
サンプル・ファイルが格納された作業ディレクトリに移動します。
Windows 2003
> cd <workdirectory>\cxx
UNIX
> cd <workdirectory>/cxx
PersonQueryサンプル・アプリケーションには表4-2でリストおよび説明されているファイルを使用します。
 
表4-2 Interceptorsサンプル・アプリケーションに含まれるファイル
ディレクトリ
ファイル
説明
app_cxx (interceptors_cxxのサブディレクトリ)
Readme.txt
インターセプタのサンプル・アプリケーション一式のビルドと実行に関する最新情報が記載されたファイル。
makefile.mk
UNIXシステムでインターセプタのサンプル・アプリケーション一式すべて(PersonQueryアプリケーションおよび全サンプル・インターセプタ)をビルドするためのmakefile。
makefile.nt
Windows 2003システムでインターセプタのサンプル・アプリケーション一式すべて(PersonQueryアプリケーションおよび全サンプル・インターセプタ)をビルドするためのmakefile。
makefile.inc
適切なplatform.incファイルで定義されるマクロを使用する、一般的なmakefile。
personquery_i.h and
personquery_i.cpp
PersonQueryインタフェースの実装。
personqueryc.cpp
PersonQueryアプリケーションのソース・ファイル。
personquerys.cpp
PersonQueryデータベース・サーバーのソース・ファイル。
setenv.ksh
UNIXシステムでインターセプタのサンプル・アプリケーション一式すべてをビルドするために必要な全環境変数を設定するシェル・ファイル。
setenv.cmd
Windows 2003システムでインターセプタのサンプル・アプリケーション一式すべてをビルドするために必要な全環境変数を設定するコマンド・ファイル。
data_cxx
(interceptors_cxxのサブディレクトリ)
InterceptorData.cpp
InterceptorData C++ソース・ファイル。
InterceptorData.h
InterceptorDataクラスの定義ファイル。
makefile.inc
InterceptorDataインターセプタのビルドに、適切なplatform.incファイルで定義されたマクロを使用する、一般的なmakefile。
makefile.mk
UNIXシステムでInterceptorDataインターセプタをビルドするmakefile。
makefile.nt
Windows 2003システムでInterceptorDataインターセプタをビルドするmakefile。
simple_cxx (interceptors_cxxのサブディレクトリ)
InterceptorSimp.cpp
InterceptorSimp C++ソース・ファイル。
InterceptorSimp.h
InterceptorSimpクラスの定義ファイル。
makefile.inc
InterceptorSimpインターセプタのビルドに、適切なplatform.incファイルで定義されたマクロを使用する、一般的なmakefile。
makefile.mk
UNIXシステムでInterceptorSimpインターセプタをビルドするmakefile。
makefile.nt
Windows 2003システムでInterceptorSimpインターセプタをビルドするmakefile。
security_cxx (interceptors_cxxのサブディレクトリ)
InterceptorSec.cpp
InterceptorSec C++ソース・ファイル。
InterceptorSec.h
InterceptorSecクラスの定義ファイル。
makefile.inc
InterceptorSecインターセプタのビルドに、適切なplatform.incファイルで定義されたマクロを使用する、一般的なmakefile。
makefile.mk
UNIXシステムでInterceptorSecインターセプタをビルドするmakefile。
makefile.nt
Windows 2003システムでInterceptorSecインターセプタをビルドするmakefile。
common (interceptors_cxxのサブディレクトリ)
app.inc
アプリケーションの構成のためのmakefile定義を含むファイル。
platform.inc
インターセプタのサンプル・アプリケーション一式をビルドするための、プラットフォーム固有のmake定義が含まれるファイル。platformは、使用しているマシンのシステム・プラットフォームを表します。
common.mk
UNIXシステムのmakefile定義が含まれるファイル。
makefile.inc
適切なplatform.incファイルで定義されるマクロを使用する、一般的なmakefile。
makefile.mk
UNIXシステムでサンプル・アプリケーション用ファイル一式すべてをビルドするmakefile。
makefile.nt
Windowsシステムでサンプル・アプリケーション用ファイル一式すべてをビルドするmakefile。
personquery.idl
PersonQueryサンプル・アプリケーションのインタフェースを定義するOMG IDLファイル。
PersonQueryアプリケーション・ファイルに対する保護の変更
Oracle Tuxedoソフトウェアのインストール時には、サンプル・アプリケーションは読取り専用に設定されています。PersonQueryサンプル・アプリケーションのファイルを編集またはビルドできるようにするには、次のように作業ディレクトリにコピーしたファイルの保護属性を変更する必要があります。まず、サンプル・アプリケーションのファイルをコピーしたディレクトリにアクセスしていることを確認します。
Windows 2003
prompt>attrib -r /s *.*
UNIX
prompt>/bin/ksh
ksh prompt>chmod -R u+w *.*
環境変数の設定
PersonQueryサンプル・アプリケーションをビルドして実行する前に、アプリケーションが実行される環境を設定する必要があります。PersonQueryサンプル・アプリケーションのビルドと実行に必要な環境変数およびプロパティの設定を行うには、次のコマンドを入力します。
Windows 2003
> setenv.cmd
UNIX:
> $ . ./setenv.ksh
CORBAクライアントおよびサーバー・アプリケーションのビルド
次のコマンドにより、PersonQueryアプリケーションをビルドし、マシン固有のUBBCONFIGファイルを作成し、UBBCONFIGファイルをロードできます。
Windows 2003
> nmake -f makefile.nt
UNIX
$ make -f makefile.mk
注意:
便宜上、この手順で実行されるmakefileによってインターセプタのサンプル一式すべてをビルドします。これには、InterceptorSimp、InterceptorSec、およびInterceptorDataインターセプタも含まれます。これらのインターセプタの実装とビルド、およびPersonQueryサンプル・アプリケーションによる実行については、以降の章で説明します。
PersonQueryクライアントおよびサーバー・アプリケーションの起動
次のコマンドを入力して、PersonQueryサンプル・アプリケーションを起動します。
prompt> tmboot -y
PersonQueryサンプル・アプリケーションの実行
PersonQueryサンプル・アプリケーションの代表的な使用方法として、次の手順に従います。
1.
次の例のように、1つの特性について問合せコマンドを入力し、返された項目数を確認します。
Option? hair brown eyes blue
2.
1つ前の手順で問合せを行った特性に関し、さらに問合せデータを入力します。
3.
すべての問合せデータが必要なレベルに絞られるまで、問合せを続行します。
4.
resultコマンドを入力して、最終的な問合せ結果を表示します。
5.
新しい問合せサイクルを開始します。
6.
exitコマンドを入力して、アプリケーションを終了します。
PersonQueryサンプル・アプリケーションの停止
PersonQueryサンプル・アプリケーションを停止するには、次のコマンドを入力します。
prompt>tmshutdown -y
 

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved