![]() ![]() ![]() ![]() |
BEA Tuxedo CORBA のクライアント アプリケーションとサーバ アプリケーションの作成については、次の BEA Tuxedo オンライン マニュアルを参照してください。
注意 : | BEA Tuxedo CORBA Java クライアントと BEA Tuxedo CORBA Java クライアント ORB は Tuxedo 8.1 で非推奨になり、今後はサポートされなくなりました。BEA Tuxedo CORBA Java クライアントおよび BEA Tuxedo CORBA Java クライアント ORB のテキスト参照、関連するコード サンプルはすべてサードパーティの Java ORB ライブラリの実装/実行の簡易化とプログラマによる参照だけに使用する必要があります。 |
注意 : | サード パーティの CORBA Java ORB のテクニカル サポートは、各ベンダによって提供されます。BEA Tuxedo では、サード パーティの CORBA Java ORB に関する技術的なサポートやマニュアルは提供していません。 |
表 3-1 は、BEA Tuxedo CORBA アプリケーションの開発プロセスの概略です。
図 3-1 は、BEA Tuxedo CORBA アプリケーションを開発するプロセスを示しています。
このトピックでは、Simpapp サンプル アプリケーションを使用して開発プロセスを説明していきます。
Simpapp サンプル アプリケーションの CORBA サーバ アプリケーションでは、次の 2 つのメソッドを備えた CORBA オブジェクトの実装が提供されます。
図 3-2 は、Simpapp サンプル アプリケーションのしくみを示しています。
Simpapp サンプル アプリケーションのソース ファイルは、BEA Tuxedo ソフトウェアの $TUXDIR\samples\corba\simpapp
ディレクトリにあります。Simpapp サンプル アプリケーションをビルドおよび実行する手順は、同じディレクトリの Readme.txt
ファイルに記載されています。
注意 : | Simpapp サンプル アプリケーションは、CORBA C++ のクライアント アプリケーションとサーバ アプリケーションのビルドを例示します。 |
BEA Tuxedo では、BEA Tuxedo CORBA アプリケーションの開発を例示および支援するサンプル アプリケーションがいくつか用意されています。サンプル アプリケーションの概要については、BEA Tuxedo オンライン マニュアルのサンプルを参照してください。
BEA 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
{
// 文字列を小文字に変換 (新しい文字列を返す)
string to_lower(in string val);
// 文字列を大文字に変換 (置換)
void to_upper(inout string val);
};
interface SimpleFactory
{
Simple find_simple();
};
OMG IDL で定義されたインタフェース仕様は、CORBA クライアント アプリケーションの CORBA クライアント スタブおよび CORBA サーバ アプリケーションのスケルトンを生成するために IDL コンパイラで使用されます。CORBA クライアント スタブは、CORBA クライアント アプリケーションによってすべてのオペレーション呼び出しで使用されます。記述したコードと一緒にスケルトンを使用すると、CORBA オブジェクトを実装する CORBA サーバ アプリケーションを作成できます。
開発の過程では、次のコマンドのいずれかを使用して、OMG IDL ファイルをコンパイルし、BEA Tuxedo CORBA クライアント アプリケーションおよびサーバ アプリケーションの CORBA クライアント スタブおよびスケルトンを生成します。
idl
コマンドを使用します。idl
コマンドの説明については、BEA Tuxedo オンライン マニュアルの『Tuxedo コマンド リファレンス』を参照してください。
表 3-3 に、idl
コマンドによって作成されるファイルの一覧を示します。
BEA Tuxedo ソフトウェアでは、CORBA C++ サーバ アプリケーションがサポートされています。CORBA サーバ アプリケーションを作成する手順は次のとおりです。
OMG IDL ファイルをコンパイルした後は、ファイルの各インタフェースのオペレーションを実装するメソッドを記述する必要があります。実装ファイルには、以下のものが含まれます。
activate_object()
メソッドと deactivate_object()
メソッド (省略可能)
activate_object
() メソッドと deactivate_object()
メソッドの中では、オブジェクトのアクティブ化と非アクティブ化に関連する特定のステップを実行するコードを記述します。詳細については、BEA Tuxedo オンライン マニュアルの『Tuxedo CORBA サーバ アプリケーションの開発方法』を参照してください。
実装ファイルは手作業で記述できます。idl
コマンドには、実装ファイルのテンプレートを生成するオプションがあります。
コード リスト 3-2 は、Simpapp サンプル アプリケーションの Simple
インタフェースと SimpleFactory
インタフェースの C++ 実装を示しています。
// 文字列を小文字に変換する Simple_i::to_lower メソッド
// の実装
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();
}
// 文字列を大文字に変換する Simple_i::to_upper メソッド
// の実装
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();
}
// Simple オブジェクトのオブジェクト参照を作成する
// SimpleFactory_i::find_simple メソッドの実装
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;
// サーバを起動するメソッド
CORBA::Boolean Server::initialize(int argc, char* argv[])
{
// ファクトリのオブジェクト参照を作成
static_var_factory_reference =
TP::create_object_reference(
_tc_SimpleFactory->id(),
"simple_factory",
CORBA::NVList::_nil()
);
// ファクトリ リファレンスを FactoryFinder に登録
TP::register_factory(
static_var_factory_reference.in(),
_tc_SimpleFactory->id()
);
return CORBA_TRUE;
}
// サーバを停止するメソッド
void Server::release()
{
// ファクトリの登録を削除
try {
TP::unregister_factory(
static_var_factory_reference.in(),
_tc_SimpleFactory->id()
);
}
catch (...) {
TP::userlog("Couldn't unregister the SimpleFactory");
}
}
// サーバントを作成するメソッド
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 ファイルで定義します。BEA Tuxedo CORBA アプリケーションでのトランザクションの使用については、BEA Tuxedo オンライン マニュアルの『Tuxedo CORBA トランザクション』を参照してください。 |
BEA Tuxedo ソフトウェアでは、表 3-4 のリストにあるアクティブ化ポリシーがサポートされています。
Simpapp サンプル アプリケーションの Simple
インタフェースには、メソッドのデフォルトのアクティブ化ポリシーが割り当てられます。オブジェクトの状態の管理およびアクティブ化ポリシーの定義の詳細については、BEA Tuxedo オンライン マニュアルの『Tuxedo CORBA サーバ アプリケーションの開発方法』を参照してください。
CORBA クライアント アプリケーションから容易に見つかるように、CORBA サーバ アプリケーションでファクトリを管理するには、そのファクトリを FactoryFinder オブジェクトに登録するコードを記述する必要があります。
CORBA サーバ アプリケーションで管理されるファクトリを登録するコードを記述するには、次の手順に従います。
create_object_reference()
メソッドの呼び出しをコードに含めます。その際には、ファクトリの OMG IDL インタフェースのインタフェース リポジトリ ID またはオブジェクト ID (OID) を文字列形式で指定します。ルーティング基準を指定することも可能です。
register_factory()
メソッドを使用すると、BEA Tuxedo ドメインの FactoryFinder オブジェクトにファクトリを登録できます。register_factory()
メソッドでは、ファクトリのオブジェクト参照と文字列識別子を指定する必要があります。
コード リスト 3-4 は、ファクトリを作成および登録する、Simpapp サンプル アプリケーションのコードを示しています。
...
CORBA::Object_var v_reg_oref =
TP:create_object_reference(
_tc.SimpleFactory->id(), // ファクトリのインタフェース ID
“simplefactory”, // オブジェクト ID
CORBA::NVList::_nil() // ルーティング基準
);
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
);
}
...
BEA Tuxedo ソフトウェアでは、次のタイプの CORBA クライアント アプリケーションがサポートされています。
CORBA クライアント アプリケーションを作成する手順は次のとおりです。
CORBA クライアントの開発手順は、コード リスト 3-6 で説明されています。それらのリストの内容は、Simpapp サンプル アプリケーションのコードです。Simpapp サンプル アプリケーションの CORBA クライアント アプリケーションは、ファクトリを使用して Simple オブジェクトのオブジェクト参照を取得し、Simple オブジェクトの to_upper()
メソッドと to_lower()
メソッドを呼び出します。
int main(int argc, char* argv[])
{
try {
// ORB を初期化
CORBA::ORB_var var_orb = CORBA::ORB_init(argc, argv, "");
// Bootstrap オブジェクトを作成
Tobj_Bootstrap bootstrap(var_orb.in(), "");
// Bootstrap オブジェクトを使用して FactoryFinder を検索
CORBA::Object_var var_factory_finder_oref =
bootstrap.resolve_initial_references("FactoryFinder");
// FactoryFinder をナロー変換
Tobj::FactoryFinder_var var_factory_finder_reference =
Tobj::FactoryFinder::_narrow
(var_factory_finder_oref.in());
// ファクトリ ファインダを使用して Simple ファクトリを検索
CORBA::Object_var var_simple_factory_oref =
var_factory_finder_reference->find_one_factory_by_id(
_tc_SimpleFactory->id()
);
// Simple ファクトリをナロー変換
SimpleFactory_var var_simple_factory_reference =
SimpleFactory::_narrow(
var_simple_factory_oref.in());
// Simple オブジェクトを検索
Simple_var var_simple =
var_simple_factory_reference->find_simple();
// ユーザから文字列を取得
cout << "String?";
char mixed[256];
cin >> mixed;
// 文字列を大文字に変換
CORBA::String_var var_upper = CORBA::string_dup(mixed);
var_simple->to_upper(var_upper.inout());
cout << var_upper.in() << endl;
// 文字列を小文字に変換
CORBA::String_var var_lower = var_simple->to_lower(mixed);
cout << var_lower.in() << endl;
return 0;
}
}
BEA Tuxedo CORBA アプリケーションでトランザクションを使用する場合は、BEA Tuxedo CORBA アプリケーションの代わりにデータベースとやり取りするリソース マネージャの CORBA サーバ プロセスを作成する必要があります。使用するリソース マネージャは、X/OPEN XA 仕様に準拠していなければなりません。リソース マネージャについての次の情報が必要です。
新しい XA リソース マネージャを BEA 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
コマンドの詳細については、BEA Tuxedo オンライン マニュアルの『Tuxedo コマンド リファレンス』を参照してください。
BEA Tuxedo ソフトウェアは優れた柔軟性と多くのオプションをアプリケーション設計者やプログラマに提供するので、同じ CORBA アプリケーションが 2 つできることはありません。たとえば、アプリケーションは小さく、単純であることもあれば (マシン上で動作する単一のクライアントやサーバ)、数千単位のクライアント アプリケーションとサーバ アプリケーションをまたがるトランザクションを処理できるぐらいに複雑になる場合もあります。このため、管理の対象となるすべての BEA Tuxedo CORBA アプリケーションについて、システム管理者はそのアプリケーションの構成要素 (ドメイン、サーバ アプリケーション、クライアント アプリケーション、インタフェースなど) を定義および管理するコンフィグレーション ファイルを用意する必要があります。
コンフィグレーション ファイルを作成するときには、アプリケーションの実行可能バージョンを作成するために BEA Tuxedo ソフトウェアによって解釈されるパラメータのセットを使用して BEA 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
コンフィグレーション ファイルには次の 2 種類があります。
UBBCONFIG
ファイルと呼びます。コンフィグレーション ファイルの名前は、任意の名前を使用できます。TUXCONFIG
ファイル。バイナリ形式の UBBCONFIG
ファイルで、tmloadcf
コマンドを使用して作成します。tmloadcf
コマンドを実行する際は、TUXCONFIG
環境変数を TUXCONFIG
ファイルの名前とディレクトリの場所に設定する必要があります。tmloadcf
コマンドでは、コンフィグレーション ファイルがバイナリ形式に変換されて、コマンドで指定された位置に書き込まれます。
tmloadcf
コマンドの詳細については、BEA Tuxedo オンライン マニュアルの『Tuxedo コマンド リファレンス』を参照してください。
C++ サーバ アプリケーションのコンパイルとリンクには、buildobjserver
コマンドを使用します。buildobjserver
コマンドの形式は次のとおりです。
buildobjserver [-o servername] [options
]
buildobjserver
コマンドの構文要素を次に説明します。
マルチスレッドをサポートするサーバ アプリケーションを作成する場合は、アプリケーションをビルドするときに buildobjserver
コマンドで -t
オプションを指定する必要があります。マルチスレッドをサポートするサーバ アプリケーションの作成については、『Tuxedo CORBA サーバ アプリケーションの開発方法』を参照してください。
CORBA クライアント アプリケーションの開発の最終ステップは、実行可能なクライアント アプリケーションを生成することです。そのためには、コードをコンパイルしてクライアント スタブに対してリンクする必要があります。
CORBA C++ クライアント アプリケーションを作成する場合、buildobjclient
コマンドを使用して BEA Tuxedo CORBA クライアント アプリケーションの実行可能ファイルを生成します。このコマンドでは、静的起動を使用するインタフェースの CORBA クライアント スタブ、関連付けられるヘッダ ファイル、および標準の BEA Tuxedo ライブラリを組み合わせて CORBA クライアントの実行可能ファイルが生成されます。buildobjclient
コマンドの構文については、BEA Tuxedo オンライン マニュアルの『Tuxedo コマンド リファレンス』を参照してください。
tmboot
コマンドを使用すると、BEA Tuxedo CORBA アプリケーションでサーバ プロセスを起動できます。通常、CORBA アプリケーションは、UBBCONFIG
ファイルの RESOURCES
セクションで MASTER
として指定されたマシンから起動します。
tmboot
コマンドが実行可能ファイルを見つけられるようにするために、BEA Tuxedo システムのプロセスは $TUXDIR/bin
ディレクトリに配置する必要があります。サーバ アプリケーションは、コンフィグレーション ファイルで指定されているとおりに APPDIR
に配置されていなければなりません。
サーバ アプリケーションの起動時には、tmboot
コマンドはコンフィグレーション ファイルから CLOPT
、SEQUENCE
、SRVGRP
、SRVID
、および MIN
パラメータを使用します。サーバ アプリケーションは、コンフィグレーション ファイルでの順序で起動されます。
tmboot
コマンドの使い方については、BEA Tuxedo オンライン マニュアルの『Oracle Tuxedo のファイル形式とデータ記述方法』を参照してください。
サンプル アプリケーションは、BEA Tuxedo CORBA アプリケーションの開発に伴うタスクを例示し、BEA Tuxedo CORBA アプリケーションのビルドでプログラマが利用できるサンプル コードを提供します。サンプル アプリケーションのコードは、BEA Tuxedo 製品のすべての情報トピックで開発や管理の手順を説明するために使用します。
表 3-6 は、その他の BEA Tuxedo CORBA サンプル アプリケーションを説明しています。
![]() ![]() ![]() |