Oracle Tuxedo CORBAクライアントおよびサーバー・アプリケーションの作成方法の詳細は、Oracle Tuxedoオンライン・ドキュメントの次のドキュメントを参照してください。
注: | 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に関する技術的なサポートまたはドキュメントは提供していません。 |
表3-1は、Oracle Tuxedo CORBAアプリケーションの開発プロセスの概略です。
図3-1は、Oracle Tuxedo CORBAアプリケーションを開発するプロセスを示しています。
このトピックでは、Simpappサンプル・アプリケーションを使用して開発プロセスを説明していきます。
Simpappサンプル・アプリケーションのCORBAサーバー・アプリケーションでは、次の2つのメソッドを備えたCORBAオブジェクトの実装が提供されます。
図3-2は、Simpappサンプル・アプリケーションのしくみを示しています。
Simpappサンプル・アプリケーションのソース・ファイルは、Oracle Tuxedoソフトウェアの$TUXDIR\samples\corba\simpapp
ディレクトリにあります。Simpappサンプル・アプリケーションをビルドおよび実行する手順は、同じディレクトリのReadme.txt
ファイルに記載されています。
注: | Simpappサンプル・アプリケーションは、CORBA C++のクライアント・アプリケーションとサーバー・アプリケーションのビルドを例示します。 |
Oracle Tuxedoでは、Oracle Tuxedo CORBAアプリケーションの開発を例示および支援するサンプル・アプリケーションがいくつか用意されています。サンプル・アプリケーションの概要については、Oracle Tuxedoオンライン・ドキュメントの「サンプル」を参照してください。
Oracle Tuxedo CORBAアプリケーションの記述では、まず最初に、Object Management Group (OMG)インタフェース定義言語(IDL)を使用してすべてのCORBAインタフェースとそれらのメソッドを指定します。OMG IDLで記述したインタフェース定義を使用すると、完全にCORBAインタフェースを定義し、各操作の引数を指定できます。OMG IDLは、純粋な宣言型言語です。つまり、実装の詳細は含まれていません。OMG IDLで指定される操作は、CORBAバインディングを提供する任意の言語で記述し、呼び出すことができます。
Simpappサンプル・アプリケーションは、表3-2のリストにあるCORBAインタフェースを実装します。
リスト 3-1は、Simpappサンプル・アプリケーションのCORBAインタフェースを定義するsimple.idl
ファイルを示しています。
#pragma prefix "beasys.com"
interface Simple
{
//Convert a string to lower case (return a new string)
string to_lower(in string val);
//Convert a string to upper case (in place)
void to_upper(inout string val);
};
interface SimpleFactory
{
Simple find_simple();
};
OMG IDLで定義されたインタフェース仕様は、CORBAクライアント・アプリケーションのCORBAクライアント・スタブおよびCORBAサーバー・アプリケーションのスケルトンを生成するためにIDLコンパイラで使用されます。CORBAクライアント・スタブは、CORBAクライアント・アプリケーションによってすべての操作呼出しで使用されます。記述したコードと一緒にスケルトンを使用すると、CORBAオブジェクトを実装するCORBAサーバー・アプリケーションを作成できます。
開発の過程では、次のコマンドのいずれかを使用して、OMG IDLファイルをコンパイルし、Oracle Tuxedo CORBAクライアント・アプリケーションおよびサーバー・アプリケーションのCORBAクライアント・スタブおよびスケルトンを生成します。
表3-3に、idl
コマンドによって作成されるファイルの一覧を示します。
Oracle Tuxedoソフトウェアでは、CORBA C++サーバー・アプリケーションがサポートされています。CORBAサーバー・アプリケーションを作成する手順は次のとおりです。
注: | Oracle Tuxedoは、Linux/HP-UX/Solarisでは標準C++ヘッダー・ファイルの新しいスタイルを使用し、AIXではヘッダー・ファイルの以前のスタイルを使用します。どのヘッダー・タイプを使用するかは、OBB_ANSI_CPP マクロを確認して判別できます。 |
注: | OBB_ANSI_CPP が定義されている場合、標準C++ヘッダーが含まれています。 |
注: | OBB_ANSI_CPP が定義されていない場合、以前のCヘッダーが含まれています。 |
OMG IDLファイルをコンパイルした後は、ファイルの各インタフェースの操作を実装するメソッドを記述する必要があります。実装ファイルには、以下のものが含まれます。
実装ファイルは手作業で記述できます。idl
コマンドには、実装ファイルのテンプレートを生成するオプションがあります。
リスト 3-2は、Simpappサンプル・アプリケーションのSimple
インタフェースとSimpleFactory
インタフェースのC++実装を示しています。
// Implementation of the Simple_i::to_lower method which converts
// a string to lower case.
char* Simple_i::to_lower(const char* value)
{
CORBA::String_var var_lower = CORBA::string_dup(value);
for (char* ptr = var_lower; ptr && *ptr; ptr++) {
*ptr = tolower(*ptr);
}
return var_lower._retn();
}
// Implementation of the Simple_i::to_upper method which converts
// a string to upper case.
void Simple_i::to_upper(char*& valuel)
{
CORBA::String_var var_upper = value1;
var_upper = CORBA::string_dup(var_upper.in());
for (char* ptr = var_upper; ptr && *ptr; ptr++) {
*ptr = toupper(*ptr);
}
value = var_upper._retn();
}
// Implementation of the SimpleFactory_i::find_simple method which
// creates an object reference to a Simple object.
Simple_ptr SimpleFactory_i::find_simple()
{
CORBA::Object_var var_simple_oref =
TP::create_object_reference(
_tc_Simple->id(),
"simple",
CORBA::NVList::_nil()
);
}
CORBAサーバー・アプリケーションでは、Serverオブジェクトはすでにインスタンス化されており、Serverオブジェクトのヘッダー・ファイルを利用することができます。サーバー・アプリケーションを初期化および解放するメソッド、およびサーバーント・オブジェクトを作成するメソッド(必要な場合)は、独自に実装してください。
リスト 3-3は、Simpappサンプル・アプリケーションのServerオブジェクトのC++コードを示しています。
static CORBA::Object_var static_var_factory_reference;
// Method to start up the server
CORBA::Boolean Server::initialize(int argc, char* argv[])
{
// Create the Factory Object Reference
static_var_factory_reference =
TP::create_object_reference(
_tc_SimpleFactory->id(),
"simple_factory",
CORBA::NVList::_nil()
);
// Register the factory reference with the FactoryFinder
TP::register_factory(
static_var_factory_reference.in(),
_tc_SimpleFactory->id()
);
return CORBA_TRUE;
}
// Method to shutdown the server
void Server::release()
{
// Unregister the factory.
try {
TP::unregister_factory(
static_var_factory_reference.in(),
_tc_SimpleFactory->id()
);
}
catch (...) {
TP::userlog("Couldn't unregister the SimpleFactory");
}
}
// Method to create servants
Tobj_Servant Server::create_servant(const char*
interface_repository_id)
{
if (!strcmp(interface_repository_id,
_tc_SimpleFactory->id())) {
return new SimpleFactory_i();
}
if (!strcmp(interface_repository_id,
_tc_Simple->id())) {
return new Simple_i();
}
return 0;
}
CORBAサーバーを開発する過程では、オブジェクトのアクティブ化ポリシーを設定して、どのイベントでオブジェクトがアクティブ化および非アクティブ化されるのかを指定します。
CORBAサーバー・アプリケーションでは、実装構成ファイル(ICF)でオブジェクトのアクティブ化ポリシーを指定します。genicf
コマンドを使用すると、テンプレートのICFファイルが作成されます。
注: | トランザクション・ポリシーもICFファイルで定義します。Oracle Tuxedo CORBAアプリケーションでのトランザクションの使用については、Oracle Tuxedoオンライン・ドキュメントの『CORBAトランザクションの使用』を参照してください。 |
Oracle Tuxedoソフトウェアでは、表3-4のリストにあるアクティブ化ポリシーがサポートされています。
Simpappサンプル・アプリケーションのSimple
インタフェースには、メソッドのデフォルトのアクティブ化ポリシーが割り当てられます。オブジェクトの状態の管理およびアクティブ化ポリシーの定義の詳細は、Oracle Tuxedoオンライン・ドキュメントの『CORBAサーバー・アプリケーションの作成』を参照してください。
CORBAクライアント・アプリケーションから容易に見つかるように、CORBAサーバー・アプリケーションでファクトリを管理するには、そのファクトリをFactoryFinderオブジェクトに登録するコードを記述する必要があります。
CORBAサーバー・アプリケーションで管理されるファクトリを登録するコードを記述するには、次の手順に従います。
create_object_reference()
メソッドの呼出しをコードに含めます。その際には、ファクトリのOMG IDLインタフェースのインタフェース・リポジトリIDまたはオブジェクトID (OID)を文字列形式で指定します。ルーティング基準を指定することも可能です。
register_factory()
メソッドを使用すると、Oracle TuxedoドメインのFactoryFinderオブジェクトにファクトリを登録できます。register_factory()
メソッドでは、ファクトリのオブジェクト参照と文字列識別子を指定する必要があります。
リスト 3-4は、ファクトリを作成および登録する、Simpappサンプル・アプリケーションのコードを示しています。
...
CORBA::Object_var v_reg_oref =
TP:create_object_reference(
_tc.SimpleFactory->id(), //Factory Interface ID
“simplefactory”, //Object ID
CORBA::NVList::_nil() //Routing Criteria
);
TP::register_factory(
CORBA::Object_var v_reg_oref.in(),
_tc_SimpleFactory->id(),
);
...
リスト 3-4については、次の点に注意してください。
CORBAサーバー・アプリケーションには、CORBAサーバー・アプリケーションを適切に停止するコードが必要です。release()
メソッドは、その目的のために用意されています。release()
メソッドの中では、次のようなCORBAサーバー・アプリケーションに固有のクリーンアップ・タスクを実行できます。
停止のリクエストを受信したCORBAサーバー・アプリケーションは、ほかのリモート・オブジェクトからのリクエストを受信することができなくなります。このことは、管理タスクであるCORBAサーバー・アプリケーションの停止の順序に影響します。たとえば、あるサーバー・プロセスがあるとして、2番目のサーバー・プロセスのrelease()
メソッドにその最初のサーバー・プロセスの呼出しが含まれている場合はそのサーバー・プロセスを停止しないでください。
サーバーを停止するときには、サーバー・アプリケーションの各ファクトリの登録を削除する必要があります。unregister_factory()
メソッドの呼出しは、release()
実装の最初のアクションとして行わなければなりません。unregister_factory()
メソッドでは、サーバー・アプリケーションのファクトリの登録が削除されます。この操作では、次の入力引数が必要です。
リスト 3-5は、サーバー・アプリケーションを解放し、CORBAサーバー・アプリケーションのファクトリを登録解除するC++コードを示しています。
...
public void release()
{
TP::unregister_factory(
factory_reference.in(),
SimpleFactoryHelper->id
);
}
...
Oracle Tuxedoソフトウェアでは、次のタイプのCORBAクライアント・アプリケーションがサポートされています。
CORBAクライアント・アプリケーションを作成する手順は次のとおりです。
CORBAクライアントの開発手順は、リスト 3-6で説明されています。それらのリストの内容は、Simpappサンプル・アプリケーションのコードです。Simpappサンプル・アプリケーションのCORBAクライアント・アプリケーションは、ファクトリを使用してSimpleオブジェクトのオブジェクト参照を取得し、Simpleオブジェクトのto_upper()
メソッドとto_lower()
メソッドを呼び出します。
int main(int argc, char* argv[])
{
try {
// Initialize the ORB
CORBA::ORB_var var_orb = CORBA::ORB_init(argc, argv, "");
// Create the Bootstrap object
Tobj_Bootstrap bootstrap(var_orb.in(), "");
// Use the Bootstrap object to find the FactoryFinder
CORBA::Object_var var_factory_finder_oref =
bootstrap.resolve_initial_references("FactoryFinder");
// Narrow the FactoryFinder
Tobj::FactoryFinder_var var_factory_finder_reference =
Tobj::FactoryFinder::_narrow
(var_factory_finder_oref.in());
// Use the factory finder to find the Simple factory
CORBA::Object_var var_simple_factory_oref =
var_factory_finder_reference->find_one_factory_by_id(
_tc_SimpleFactory->id()
);
// Narrow the Simple factory
SimpleFactory_var var_simple_factory_reference =
SimpleFactory::_narrow(
var_simple_factory_oref.in());
// Find the Simple object
Simple_var var_simple =
var_simple_factory_reference->find_simple();
// Get a string from the user
cout << "String?";
char mixed[256];
cin >> mixed;
// Convert the string to upper case :
CORBA::String_var var_upper = CORBA::string_dup(mixed);
var_simple->to_upper(var_upper.inout());
cout << var_upper.in() << endl;
// Convert the string to lower case
CORBA::String_var var_lower = var_simple->to_lower(mixed);
cout << var_lower.in() << endl;
return 0;
}
}
Oracle Tuxedo CORBAアプリケーションでトランザクションを使用するとき、Oracle Tuxedo CORBAアプリケーションの代理でデータベースと相互通信を行うリソース・マネージャのCORBAサーバー・プロセスを作成する必要があります。使用するリソース・マネージャは、X/OPEN XA仕様に準拠していなければなりません。リソース・マネージャについての次の情報が必要です。
新しいXAリソース・マネージャをOracle Tuxedoシステムに統合するときには、XAリソース・マネージャについての情報が格納されるようにファイル$TUXDIR/udataobj/RM
を更新する必要があります。その情報は、XAリソース・マネージャの適切なライブラリを使用するため、そしてトランザクション・マネージャとXAリソース・マネージャのインタフェースを自動的かつ適切に設定するために使用します。このファイルの形式は次のとおりです。
rm_name
:
rm_structure_name
:
library_names
rm_name
はXAリソース・マネージャの名前、rm_structure_name
はXAリソース・マネージャの名前を定義するxa_switch_t
構造体の名前、library_names
はXAリソース・マネージャのオブジェクト・ファイルのリストです。これらの値の前後には空白類(タブやスペース)を入れることができ、library_names
の中に埋め込んでもかまいません。コロン(:)は、どの値にも挿入できません。「#」マークで始まる行は、コメントと判断されて無視されます。
buildtms
コマンドを使用すると、XAリソース・マネージャのサーバー・プロセスをビルドできます。buildtms
コマンドの結果として生じるファイルは、$TUXDIR/bin
ディレクトリにインストールする必要があります。
buildtms
コマンドの詳細は、Oracle Tuxedoオンライン・ドキュメントの『Oracle Tuxedoコマンド・リファレンス』を参照してください。
Oracle Tuxedoソフトウェアは優れた柔軟性と多くのオプションをアプリケーション設計者やプログラマに提供するので、同じCORBAアプリケーションが2つできることはありません。たとえば、アプリケーションは小さく、単純であることもあれば(マシン上で動作する単一のクライアントやサーバー)、数千単位のクライアント・アプリケーションとサーバー・アプリケーションをまたがるトランザクションを処理できるぐらいに複雑になる場合もあります。このため、管理の対象となるすべてのOracle Tuxedo CORBAアプリケーションについて、システム管理者はそのアプリケーションの構成要素(ドメイン、サーバー・アプリケーション、クライアント・アプリケーション、インタフェースなど)を定義および管理する構成ファイルを用意する必要があります。
構成ファイルを作成するときには、アプリケーションの実行可能バージョンを作成するためにOracle Tuxedoソフトウェアによって解釈されるパラメータのセットを使用してOracle Tuxedo CORBAアプリケーションを記述することになります。管理の設定段階において、システム管理者のする仕事は構成ファイルを作成することです。構成ファイルには、表3-5のリストにあるセクションが格納されます。
リスト 3-7は、Simpappサンプル・アプリケーションの構成ファイルを示しています。
*RESOURCES
IPCKEY 55432
DOMAINID simpapp
MASTER SITE1
MODEL SHM
LDBAL N
*MACHINES
"PCWIZ"
LMID = SITE1
APPDIR = "C:\TUXDIR\MY_SIM~1"
TUXCONFIG = "C:\TUXDIR\MY_SIM~1\results\tuxconfig"
TUXDIR = "C:\TUXDIR"
MAXWSCLIENTS = 10
*GROUPS
SYS_GRP
LMID = SITE1
GRPNO = 1
APP_GRP
LMID = SITE1
GRPNO = 2
*SERVERS
DEFAULT:
RESTART = Y
MAXGEN = 5
TMSYSEVT
SRVGRP = SYS_GRP
SRVID = 1
TMFFNAME
SRVGRP = SYS_GRP
SRVID = 2
CLOPT = "-A -- -N -M"
TMFFNAME
SRVGRP = SYS_GRP
SRVID = 3
CLOPT = "-A -- -N"
TMFFNAME
SRVGRP = SYS_GRP
SRVID = 4
CLOPT = "-A -- -F"
simple_server
SRVGRP = APP_GRP
SRVID = 1
RESTART = N
ISL
SRVGRP = SYS_GRP
SRVID = 5
CLOPT = "-A -- -n //PCWIZ:2468"
*SERVICES
UBBCONFIG
ファイルと呼びます。構成ファイルの名前は、任意の名前を使用できます。TUXCONFIG
ファイルは、バイナリ形式のUBBCONFIG
ファイルで、tmloadcf
コマンドを使用して作成します。tmloadcf
コマンドを実行する際は、TUXCONFIG
環境変数をTUXCONFIG
ファイルの名前とディレクトリの場所に設定する必要があります。tmloadcf
コマンドでは、構成ファイルがバイナリ形式に変換されて、コマンドで指定された位置に書き込まれます。 tmloadcf
コマンドの詳細は、Oracle Tuxedoオンライン・ドキュメントの『Oracle Tuxedoコマンド・リファレンス』を参照してください。
C++サーバー・アプリケーションのコンパイルとリンクには、buildobjserver
コマンドを使用します。buildobjserver
コマンドの形式は次のとおりです。
buildobjserver [-o servername] [options
]
buildobjserver
コマンドの構文要素を次に説明します。
マルチスレッドをサポートするサーバー・アプリケーションを作成する場合は、アプリケーションをビルドするときにbuildobjserver
コマンドで-t
オプションを指定する必要があります。マルチスレッドをサポートするサーバー・アプリケーションの作成については、『CORBAサーバー・アプリケーションの作成』を参照してください。
CORBAクライアント・アプリケーションの開発の最終ステップは、実行可能なクライアント・アプリケーションを生成することです。そのためには、コードをコンパイルしてクライアント・スタブに対してリンクする必要があります。
CORBA C++クライアント・アプリケーションを作成する場合、buildobjclient
コマンドを使用してOracle Tuxedo CORBAクライアント・アプリケーションの実行可能ファイルを生成します。このコマンドでは、静的起動を使用するインタフェースのCORBAクライアント・スタブ、関連付けられるヘッダー・ファイル、および標準のOracle Tuxedoライブラリを組み合せてCORBAクライアントの実行可能ファイルが生成されます。buildobjclient
コマンドの構文については、Oracle Tuxedoオンライン・ドキュメントの『Oracle Tuxedoコマンド・リファレンス』を参照してください。
tmboot
コマンドを使用すると、Oracle Tuxedo CORBAアプリケーションでサーバー・プロセスを起動できます。通常、CORBAアプリケーションは、UBBCONFIG
ファイルのRESOURCES
セクションでMASTER
として指定されたマシンから起動します。
tmboot
コマンドが実行可能ファイルを見つけられるようにするために、Oracle Tuxedoシステムのプロセスは$TUXDIR/bin
ディレクトリに配置する必要があります。サーバー・アプリケーションは、構成ファイルで指定されているとおりにAPPDIR
に配置されていなければなりません。
サーバー・アプリケーションの起動時には、tmboot
コマンドは構成ファイルからCLOPT
、SEQUENCE
、SRVGRP
、SRVID
、およびMIN
パラメータを使用します。サーバー・アプリケーションは、構成ファイルでの順序で起動されます。
tmboot
コマンドの使い方については、Oracle Tuxedoオンライン・ドキュメントの『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』を参照してください。
サンプル・アプリケーションは、Oracle Tuxedo CORBAアプリケーションの開発時のタスクを例示し、CORBAクライアントおよびサーバーのプログラマが自分でOracle Tuxedo CORBAアプリケーションを作成する際に使用できるサンプル・コードが含まれています。サンプル・アプリケーションのコードは、Oracle Tuxedo製品の情報トピック全体に渡り、開発および管理ステップを説明するために使用されています。
表3-6は、その他のOracle Tuxedo CORBAサンプル・アプリケーションを説明しています。
Oracle Tuxedo認証をOracle Tuxedo CORBAアプリケーションに追加する手順を例示します。Securityサンプル・アプリケーションのビルドと実行については、Oracle Tuxedoオンライン・ドキュメントの『CORBAアプリケーションにおけるセキュリティの使用』を参照してください。
|
|
Basicサンプル・アプリケーションのCORBA C++サーバー・アプリケーションとCORBAクライアント・アプリケーションにトランザクションに関与するオブジェクトを追加します。Transactionsサンプル・アプリケーションは、実装構成ファイル(ICF)を使用して、CORBAオブジェクトのトランザクション・ポリシーを定義する方法を示します。Transactionsサンプル・アプリケーションのビルドと実行については、Oracle Tuxedoオンライン・ドキュメントの『CORBAトランザクションの使用』を参照してください。
|
|
証明書認証をサポートするためのSimpappサンプル・アプリケーションに対する必要な開発および管理の変更を実装します。Secure Simpappサンプル・アプリケーションのビルドと実行については、Oracle Tuxedoオンライン・ドキュメントの『CORBAアプリケーションにおけるセキュリティの使用』を参照してください。
|
|