bea ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > Tuxedo > Tuxedo CORBA アプリケーション入門 > BEA Tuxedo CORBA アプリケーションの開発 |
Tuxedo CORBA アプリケーション入門
|
BEA Tuxedo CORBA アプリケーションの開発
ここでは、以下の内容について説明します。
BEA Tuxedo CORBA のクライアント・アプリケーションとサーバ・アプリケーションの作成については、次の BEA Tuxedo オンライン・マニュアルを参照してください。
BEA Tuxedo CORBA アプリケーションの開発プロセスの概要
表 3-1 は、BEA Tuxedo CORBA アプリケーションの開発プロセスの概略です。
開発プロセスの各手順は、以降の節で詳しく説明します。 図3-1 は、BEA Tuxedo CORBA アプリケーションを開発するプロセスを示しています。 図 3-1 BEA Tuxedo CORBA アプリケーションの開発プロセス
Simpapp サンプル・アプリケーション
このトピックでは、Simpapp サンプル・アプリケーションを使用して開発プロセスを説明していきます。
Simpapp サンプル・アプリケーションの CORBA サーバ・アプリケーションでは、次の 2 つのメソッドを備えた CORBA オブジェクトのインプリメンテーションが提供されます。
図3-2 は、Simpapp サンプル・アプリケーションのしくみを示しています。
図 3-2 Simpapp サンプル・アプリケーション
Simpapp サンプル・アプリケーションのソース・ファイルは、BEA Tuxedo ソフトウェアの $TUXDIR¥samples¥corba¥simpapp ディレクトリにあります。Simpapp サンプル・アプリケーションをビルドおよび実行する手順は、同じディレクトリの Readme.txt ファイルに記載されています。 注記 Simpapp サンプル・アプリケーションは、CORBA C++ のクライアント・アプリケーションとサーバ・アプリケーションおよび CORBA Java のクライアント・アプリケーションのビルドを例示します。単純な ActiveX クライアント・アプリケーションのビルドについては、BEA Tuxedo オンライン・マニュアルの「Basic サンプル・アプリケーション」を参照してください。 BEA Tuxedo では、BEA Tuxedo CORBA アプリケーションの開発を例示および支援するサンプル・アプリケーションがいくつか用意されています。サンプル・アプリケーションの概要については、BEA Tuxedo オンライン・マニュアルのサンプルを参照してください。
ステップ 1: OMG IDL コードの記述
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 ファイルを示しています。 コード リスト 3-1 Simpapp サンプル・アプリケーションの OMG IDL コード
#pragma prefix "beasys.com"
interface Simple
{
//文字列を小文字に変換 (新しい文字列を返す)
string to_lower(in string val); //文字列を大文字に変換 (置換)
void to_upper(inout string val);
};interface SimpleFactory
{
Simple find_simple();
};
ステップ 2: CORBA クライアント・スタブおよびスケルトンの生成
OMG IDL で定義されたインターフェイス仕様は、CORBA クライアント・アプリケーションの CORBA クライアント・スタブおよび CORBA サーバ・アプリケーションのスケルトンを生成するために IDL コンパイラで使用されます。CORBA クライアント・スタブは、CORBA クライアント・アプリケーションによってすべてのオペレーション呼び出しで使用されます。記述したコードと一緒にスケルトンを使用すると、CORBA オブジェクトをインプリメントする CORBA サーバ・アプリケーションを作成できます。
開発の過程では、次のコマンドのいずれかを使用して、OMG IDL ファイルをコンパイルし、BEA Tuxedo CORBA クライアント・アプリケーションおよびサーバ・アプリケーションの CORBA クライアント・スタブおよびスケルトンを生成します。
表 3-3 に、idl コマンドによって作成されるファイルの一覧を示します。
表 3-4 に、idltojava コマンドによって作成されるファイルの一覧を示します。
ステップ 3: CORBA サーバ・アプリケーションの記述
BEA Tuxedo ソフトウェアでは、CORBA C++ サーバ・アプリケーションがサポートされています。CORBA サーバ・アプリケーションを作成する手順は次のとおりです。
各インターフェイスのオペレーションをインプリメントするメソッドの記述
OMG IDL ファイルをコンパイルした後は、ファイルの各インターフェイスのオペレーションをインプリメントするメソッドを記述する必要があります。インプリメンテーション・ファイルには、以下のものが含まれます。
activate_object() メソッドと deactivate_object() メソッドの中では、オブジェクトの活性化と非活性化に関連する特定のステップを実行するコードを記述します。詳細については、BEA Tuxedo オンライン・マニュアルの『BEA Tuxedo CORBA サーバ・アプリケーションの開発方法』 を参照してください。
インプリメンテーション・ファイルは手作業で記述できます。idl コマンドには、インプリメンテーション・ファイルのテンプレートを生成するオプションがあります。
リスト3-2 は、Simpapp サンプル・アプリケーションの Simple インターフェイスと SimpleFactory インターフェイスの C++ インプリメンテーションを示しています。
コード リスト 3-2 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 オブジェクトでは、次のタスクが実行されます。
CORBA サーバ・アプリケーションでは、Server オブジェクトは既にインスタンス化されており、Server オブジェクトのヘッダ・ファイルを利用することができます。サーバ・アプリケーションを初期化および解放するメソッド、およびサーバント・オブジェクトを作成するメソッド (必要な場合) は、独自にインプリメントしてください。
リスト3-3 は、Simpapp サンプル・アプリケーションの Server オブジェクトの C++ コードを示しています。
コード リスト 3-3 CORBA C++ Server オブジェクト
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 オンライン・マニュアルの『BEA Tuxedo CORBA トランザクション』を参照してください。
BEA Tuxedo ソフトウェアでは、表 3-5 のリストにある活性化方針がサポートされています。
Simpapp サンプル・アプリケーションの Simple インターフェイスには、メソッドのデフォルトの活性化方針が割り当てられます。オブジェクトの状態の管理および活性化方針の定義の詳細については、BEA Tuxedo オンライン・マニュアルの『BEA Tuxedo CORBA サーバ・アプリケーションの開発方法』 を参照してください。 ファクトリの作成と登録 CORBA クライアント・アプリケーションから容易に見つかるように、CORBA サーバ・アプリケーションでファクトリを管理するには、そのファクトリを FactoryFinder オブジェクトに登録するコードを記述する必要があります。 CORBA サーバ・アプリケーションで管理されるファクトリを登録するコードを記述するには、次の手順に従います。
リスト3-4 は、ファクトリを作成および登録する、Simpapp サンプル・アプリケーションのコードを示しています。
コード リスト 3-4 ファクトリの作成と登録の例
...
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 サーバ・アプリケーションには、CORBA サーバ・アプリケーションを適切にシャットダウンするコードが必要です。release() メソッドは、その目的のために用意されています。release() メソッドの中では、次のような CORBA サーバ・アプリケーションに固有のクリーンアップ・タスクを実行できます。
シャットダウンの要求を受信した CORBA サーバ・アプリケーションは、ほかのリモート・オブジェクトからの要求を受信することができなくなります。このことは、管理タスクである CORBA サーバ・アプリケーションのシャットダウンの順序に影響します。たとえば、あるサーバ・プロセスがあるとして、2 番目のサーバ・プロセスの release() メソッドにその最初のサーバ・プロセスの呼び出しが含まれている場合はそのサーバ・プロセスをシャットダウンしないでください。
サーバをシャットダウンするときには、サーバ・アプリケーションの各ファクトリの登録を削除する必要があります。unregister_factory() メソッドの呼び出しは、release() インプリメンテーションの最初のアクションとして行わなければなりません。unregister_factory() メソッドでは、サーバ・アプリケーションのファクトリの登録が削除されます。このオペレーションでは、次の入力引数が必要です。
リスト3-5 は、サーバ・アプリケーションを解放し、CORBA サーバ・アプリケーションのファクトリを登録解除する C++ コードを示しています。
コード リスト 3-5 BEA Tuxedo CORBA サーバ・アプリケーションの解放の例
...
public void release()
{
TP::unregister_factory(
factory_reference.in(),
SimpleFactoryHelper->id
);
}
...
ステップ 4: CORBA クライアント・アプリケーションの記述
BEA Tuxedo ソフトウェアでは、次のタイプのCORBA クライアント・アプリケーションがサポートされています。
CORBA クライアント・アプリケーションを作成する手順は次のとおりです。
注記 ActiveX クライアント・アプリケーションの作成については、BEA Tuxedo オンライン・マニュアルの 『BEA Tuxedo CORBA ActiveX』を参照してください。
CORBA クライアントの開発手順は、リスト3-6 と リスト3-7 で説明されています。それらのリストの内容は、Simpapp サンプル・アプリケーションのコードです。Simpapp サンプル・アプリケーションの CORBA クライアント・アプリケーションは、ファクトリを使用して Simple オブジェクトのオブジェクト・リファレンスを取得し、Simple オブジェクトの to_upper() メソッドと to_lower() メソッドを呼び出します。
コード リスト 3-6 Simpapp サンプル・アプリケーションの CORBA クライアント・アプリケーション
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;
}
}
コード リスト 3-7 Simpapp サンプル・アプリケーションの Java クライアント・アプリケーション
public class SimpleClient
{
public static void main(String args[])
//ORB を初期化
ORB orb = ORB.init(args, null);
// Bootstrap オブジェクトを作成
Tobj_Bootstrap bootstrap = new Tobj_Bootstrap(orb, "");
// Bootstrap オブジェクトを使用して FactoryFinder を検索
org.omg.CORBA.Object factory_finder_oref =
bootstrap.resolve_initial_references("FactoryFinder");
// FactoryFinder をナロー変換
FactoryFinder factory_finder_reference =
FactoryFinderHelper.narrow(factory_finder_oref);
// FactoryFinder を使用して Simple ファクトリを検索
org.omg.CORBA.Object simple_factory_oref =
factory_finder_reference.find_one_factory_by_id
(SimpleFactoryHelper.id());
// Simple ファクトリをナロー変換
SimpleFactory simple_factory_reference =
SimpleFactoryHelper.narrow(simple_factory_oref);
// Simple オブジェクトを検索
Simple simple = simple_factory_reference.find_simple();
// ユーザから文字列を取得
System.out.println("String?");
String mixed = in.readLine();
// 文字列を大文字に変換
org.omg.CORBA.StringHolder buf = new
org.omg.CORBA.StringHolder(mixed);
simple.to_upper(buf);
System.out.println(buf.value);
// 文字列を小文字に変換
String lower = simple.to_lower(mixed);
System.out.println(lower);
}
}
ステップ 5: XA リソース・マネージャの作成
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 オンライン・マニュアルの『BEA Tuxedo コマンド・リファレンス』 を参照してください。
ステップ 6: コンフィギュレーション・ファイルの作成
BEA Tuxedo ソフトウェアは優れた柔軟性と多くのオプションをアプリケーション設計者やプログラマに提供するので、同じ CORBA アプリケーションが 2 つできることはありません。たとえば、アプリケーションは小さく、単純であることもあれば (マシン上で動作する単一のクライアントやサーバ)、数千単位のクライアント・アプリケーションとサーバ・アプリケーションをまたがるトランザクションを処理できるぐらいに複雑になる場合もあります。このため、管理の対象となるすべての BEA Tuxedo CORBA アプリケーションについて、システム管理者はそのアプリケーションの構成要素 (ドメイン、サーバ・アプリケーション、クライアント・アプリケーション、インターフェイスなど) を定義および管理するコンフィギュレーション・ファイルを用意する必要があります。
コンフィギュレーション・ファイルを作成するときには、アプリケーションの実行可能バージョンを作成するために BEA Tuxedo ソフトウェアによって解釈されるパラメータのセットを使用して BEA Tuxedo CORBA アプリケーションを記述することになります。管理の設定段階において、システム管理者のする仕事はコンフィギュレーション・ファイルを作成することです。コンフィギュレーション・ファイルには、表 3-6 のリストにあるセクションが格納されます。
リスト3-8 は、Simpapp サンプル・アプリケーションのコンフィギュレーション・ファイルを示しています。 コード リスト 3-8 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
ステップ 7: TUXCONFIG ファイルの作成
コンフィギュレーション・ファイルには次の 2 種類があります。
tmloadcf コマンドの詳細については、BEA Tuxedo オンライン・マニュアルの『BEA Tuxedo コマンド・リファレンス』を参照してください。
ステップ 8: CORBA サーバ・アプリケーションのコンパイル
C++ サーバ・アプリケーションのコンパイルとリンクには、buildobjserver コマンドを使用します。buildobjserver コマンドの形式は次のとおりです。
buildobjserver [-o servername] [options]
buildobjserver コマンドの構文要素を次に説明します。
マルチスレッドをサポートするサーバ・アプリケーションを作成する場合は、アプリケーションをビルドするときに buildobjserver コマンドで -t オプションを指定する必要があります。マルチスレッドをサポートするサーバ・アプリケーションの作成については、『BEA Tuxedo CORBA サーバ・アプリケーションの開発方法』を参照してください。
ステップ 9: CORBA クライアント・アプリケーションのコンパイル
CORBA クライアント・アプリケーションの開発の最終ステップは、実行可能なクライアント・アプリケーションを生成することです。そのためには、コードをコンパイルしてクライアント・スタブに対してリンクする必要があります。
CORBA C++ クライアント・アプリケーションを作成する場合、buildobjclient コマンドを使用して BEA Tuxedo CORBA クライアント・アプリケーションの実行可能ファイルを生成します。このコマンドでは、静的起動を使用するインターフェイスの CORBA クライアント・スタブ、関連付けられるヘッダ・ファイル、および標準の BEA Tuxedo ライブラリを組み合わせて CORBA クライアントの実行可能ファイルが生成されます。buildobjclient コマンドの構文については、BEA Tuxedo オンライン・マニュアルの 『BEA Tuxedo コマンド・リファレンス』 を参照してください。
CORBA Java クライアント・アプリケーションを作成する場合、javac コマンドを使用して CORBA クライアント・アプリケーションの実行可能プログラムを生成します。Java クライアント・アプリケーションをコンパイルするときには、CLASSPATH で tuxdir¥udataobj¥java¥jdk¥m3envobj.jar ファイルを設定する必要があります。m3envobj.jar ファイルには、BEA Tuxedo 環境オブジェクトの Java クラスが格納されます。
ステップ 10: BEA Tuxedo CORBA アプリケーションの起動
tmboot コマンドを使用すると、BEA Tuxedo CORBA アプリケーションでサーバ・プロセスを起動できます。通常、CORBA アプリケーションは、UBBCONFIG ファイルの RESOURCES セクションで MASTER として指定されたマシンから起動します。
tmboot コマンドが実行可能ファイルを見つけられるようにするために、BEA Tuxedo システムのプロセスは $TUXDIR¥bin ディレクトリに配置する必要があります。サーバ・アプリケーションは、コンフィギュレーション・ファイルで指定されているとおりに APPDIR に配置されていなければなりません。
サーバ・アプリケーションの起動時には、tmboot コマンドはコンフィギュレーション・ファイルから CLOPT、SEQUENCE、SRVGRP、SRVID、および MIN パラメータを使用します。サーバ・アプリケーションは、コンフィギュレーション・ファイルでの順序で起動されます。
tmboot コマンドの使い方については、BEA Tuxedo オンライン・マニュアルの 『BEA Tuxedo のファイル形式とデータ記述方法』 を参照してください。
その他の BEA Tuxedo CORBA サンプル・アプリケーション
サンプル・アプリケーションは、BEA Tuxedo CORBA アプリケーションの開発に伴うタスクを例示し、BEA Tuxedo CORBA アプリケーションのビルドでプログラマが利用できるサンプル・コードを提供します。サンプル・アプリケーションのコードは、BEA Tuxedo 製品のすべての情報トピックで開発や管理の手順を説明するために使用します。
表 3-7 は、その他の BEA Tuxedo CORBA サンプル・アプリケーションを説明しています。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |