![]() |
![]() |
|
|
FactoryFinder インターフェイス
FactoryFinder インターフェイスは、BEA Tuxedo ドメインへの唯一のエントリ・ポイントとして作用する 1 つのオブジェクト・リファレンスをクライアントに提供します。BEA Tuxedo NameManager により、FactoryFinder のオブジェクト・リファレンスに対するファクトリ名のマッピングが提供されます。複数の FactoryFinder と NameManager が一緒になると、可用性と信頼性が向上します。このリリースでは、機能性のレベルを拡張して、複数ドメインをサポートしています。
注記 NameManager は CORBA サービス・ネーミング・サービスのようなネーミング・サービスではなく、登録されたファクトリを格納するための単なる手段です。
BEA Tuxedo 環境では、アプリケーション・ファクトリ・オブジェクトを使用して、クライアントがビジネス・オペレーション (TellerFactory、Teller など) の実行のためにやり取りするオブジェクトを作成します。一般に、アプリケーション・ファクトリはサーバの初期化中に作成され、リモート・クライアントと、サーバ・アプリケーション内に置かれたクライアントの双方からアクセスされます。
FactoryFinder インターフェイスと NameManager サービスは、アプリケーション・サーバではない個別のサーバに格納されています。クライアントとサーバの両アプリケーションがファクトリ情報にアクセスしてこれを更新できるように、アプリケーション・プログラミング・インターフェイス (API) のセットが提供されています。
このリリースで複数ドメインをサポートしたことにより、多数のマシンを使用するようスケーリングしたり、アプリケーション環境を分割したりする必要のある顧客にとっての利便性が向上しています。複数ドメインをサポートするために、BEA Tuxedo 環境内でファクトリを見つけるためのメカニズムが拡張され、あるドメインのファクトリを別のドメインでも認識できるようになっています。別のドメインのファクトリの可視性は、システム管理者によって制御されます。
機能、制限事項、および要件
アプリケーション・ファクトリは、サーバ・アプリケーションの初期化中に NameManager で登録する必要があります。それにより、クライアントに FactoryFinder のオブジェクト・リファレンスを提供し、それらがファクトリ登録時に作成された関連する名前に基づくファクトリ・オブジェクト・リファレンスを取得することを可能にします。
以下の機能、制限事項、および要件が、このリリースに適用されます。
CosLifeCycle::FactoryFinder
インターフェイスに準拠しています。
機能説明
BEA Tuxedo CORBA 環境では、クライアントがオブジェクトへのリファレンスを取得するための主な手段として、ファクトリ・デザイン・パターンの使用が促進されます。このデザイン・パターンを使用することにより、クライアント・アプリケーションには、別のオブジェクトのファクトリとして動作するオブジェクトへのリファレンスを取得するメカニズムが必要となります。BEA Tuxedo 環境では、CORBA を可視プログラミング・モデルとして選択しているため、ファクトリをロケートするためのメカニズムは、Object Management Group の CORBA サービス仕様 (1997 年 12 月) の第 6 章「Life Cycle Service」で示されているように、FactoryFinder を モデルとしています。
CORBA FactoryFinder モデルでは、アプリケーション・サーバは活性化されたファクトリを FactoryFinder に登録します。アプリケーション・サーバのファクトリが不活性になると、アプリケーション・サーバは FactoryFinder から対応する登録を削除します。クライアント・アプリケーションは、FactoryFinder に問い合せを行うことによって、ファクトリをロケートします。クライアント・アプリケーションは、1 つまたは複数のリファレンスの選択に使用される基準を指定することによって、返されたファクトリ・オブジェクトへのリファレンスを制御できます。
FactoryFinder のロケート
クライアント・アプリケーションは、適切なファクトリを探し始める前に、FactoryFinder へのリファレンスを取得する必要があります。クライアント・アプリケーションが関連付けられているドメイン内の FactoryFinder へのリファレンスを取得するには、クライアント・アプリケーションは次の 2 つのブートストラップ処理メカニズムのうち、いずれかを使用します。
"FactoryFinder"
の値を持つ Tobj_Bootstrap::resolve_initial_references
オペレーションを呼び出します。このオペレーションは、クライアント・アプリケーションが現在属しているドメイン内の FactoryFinder へのリファレンスを返します。BEA Tuxedo クライアント・ソフトウェアを使用している場合は、このメカニズムを使用します。詳細については、「Tobj_Bootstrap::resolve_initial_references」を参照してください。"FactoryFinder"
の値を持つ CORBA::ORB::resolve_initial_references
オペレーションを呼び出します。このオペレーションは、クライアント・アプリケーションが現在属しているドメイン内の FactoryFinder へのリファレンスを返します。サード・パーティ製のクライアント ORB を使用している場合は、このメカニズムを使用します。詳細については、「CORBA::ORB::resolve_initial_references」を参照してください。注記 クライアント・アプリケーションに返される FactoryFinder へのリファレンスは、その FactoryFinder と同じマシンに登録されたファクトリ・オブジェクトへのリファレンス、別のマシンに登録されたファクトリ・オブジェクトへのリファレンス、または別のドメインに登録されたファクトリ・オブジェクトへのリファレンスである可能性があります。
ファクトリの登録
クライアント・アプリケーションがファクトリへのリファレンスを取得できるようになるには、アプリケーション・サーバが、FactoryFinder によるインプリメンテーションの提供先となる任意のファクトリ・オブジェクトへのリファレンスを登録する必要があります (図 5-1 を参照)。BEA Tuxedo CORBA TP フレームワークにより、ファクトリ・オブジェクトのリファレンスの登録は、それが作成された後に TP::register_factory
オペレーションを使用することにより行われます。ファクトリ・オブジェクトへのリファレンスは、そのファクトリを識別する値と共に、このオペレーションに渡されます。ファクトリ・オブジェクトのリファレンスの登録は、通常はアプリケーションの初期化手順の一部 (普通は、オペレーション Server::initialize
のインプリメンテーションの一部) として行われます。
図5-1 ファクトリ・オブジェクトの登録
サーバ・アプリケーションは、シャットダウン時には以前にアプリケーション・サーバに登録されたファクトリ・オブジェクトへのリファレンスを、すべて登録を削除する必要があります。これは、ファクトリ・オブジェクトへの同じリファレンスと、ファクトリの識別に使用する対応する値を、TP::unregister_factory
オペレーションに渡すことによって行われます。登録が削除されると、ファクトリ・オブジェクトへのリファレンスは破棄できるようになります。FactoryFinder でのファクトリの登録を削除するプロセスは、通常は Server::release
オペレーションのインプリメンテーションの一環として行われます。これらのオペレーションの詳細については、「Server インターフェイス」を参照してください。
C++ マッピング
リスト 5-1 では、C++ のクラスの (静的) メソッドを示します。これらのメソッドの詳細については、「TP::register_factory()」および「TP::unregister_factory()」を参照してください。
リスト 5-1 ファクトリ登録のための C++ マッピングの擬似 OMG IDL
#include <TP.h>
static void
TP::register_factory
(
CORBA::Object_ptr factory_or, const char* factory_id);
static void
TP::unregister_factory
(
CORBA::Object_ptr factory_or, const char* factory_id);
TP.h ヘッダ・ファイルには、2 つのメソッド宣言が含まれています。このファイルは、これらのメソッドを使用するすべてのサーバ・アプリケーションに含める必要があります。
一般に、サーバ・アプリケーションはこのヘッダ・ファイルを、アプリケーション・サーバの初期化と解放のためのメソッドを含むアプリケーション・ファイル内に格納しています。
ファクトリのロケート
クライアントが、オブジェクトへのリファレンスを作成するファクトリを要求するためには、まずファクトリ・オブジェクトへのリファレンスを取得することが必要です。ファクトリ・オブジェクトへのリファレンスは、特定の選択基準で FactoryFinder に問い合せを行うことによって、取得します (図 5-2 参照)。基準は、使用されている特定の FactoryFinder インターフェイスおよびメソッドの形式によって決まります。
図5-2 ファクトリ・オブジェクトのロケート
BEA Tuxedo CORBAは、FactoryFinder 用に宣言された find_factories()
メソッドに加えて、4 つのメソッドを導入することによって、CosLifeCycle::FactoryFinder
インターフェイスを拡張します。したがって、Tobj の拡張により、クライアントは find_factories(
) メソッドまたは find_factories_by_id()
メソッドのいずれかを使って、アプリケーション・ファクトリのリストを取得できます。またクライアントは、単一のアプリケーション・ファクトリを取得するために find_one_factory
() メソッドまたは find_one_factory_by_id
() メソッドを使用し、登録されている全ファクトリのリストを取得するために list_factories ()
メソッドを使用します。
注記 Tobj_Bootstrap オブジェクトを使用する場合は、CosLifeCycle::FactoryFinder
インターフェイスに BEA Tuxedo CORBA の拡張を使用できますが、このオブジェクトはファクトリをロケートするために必須のものではありません。CORBA INS を使用していれば、CosLifeCycle::FactoryFinder
インターフェイスにより提供される find_factories()
メソッドを使用できます。
CosLifeCycle::FactoryFinder
インターフェイスは、factory_key
を定義します。これは、下記の CosNaming 名に準拠した、id
文字列と kind
文字列のシーケンスです。アプリケーション・ファクトリの登録時に、TP フレームワークによって、全アプリケーション・ファクトリの NameComponent における kind
フィールドが、文字列 FactoryInterface
に設定されます。アプリケーションは、id
フィールドの値を自身で指定します。
次のリストでは、CORBA サービス・ライフサイクル・サービスのモジュールが、自身のファイル (それぞれ ns.idl
および lcs.idl
) 内にあると仮定して、BEA Tuxedo FactoryFinder の使用に適した両ファイルのサブセットのための OMG IDL コードのみが示されます。
CORBA サービス・ネーミング・サービス・モジュールの OMG IDL
リスト 5-2 では、FactoryFinder に関連の ns.idl
ファイルを部分的に示します。
リスト 5-2 CORBA サービス・ネーミングの OMG IDL
// ------ ns.idl ------
module CosNaming {
typedef string Istring;
struct NameComponent {
Istring id;
Istring kind;
};
typedef sequence <NameComponent> Name;
};
// この情報は、「CORBAservices: Common Object Services
// Specification」(1995 年 3 月 31 日改訂版、1997 年 11 月更新)
// の 3 〜 6 ページから、OMG の許可を得て転載
CORBA サービス・ライフサイクル・サービス・モジュールの OMG IDL
リスト 5-3 では、FactoryFinder に関連の lcs.idl
ファイルを部分的に示します。
リスト 5-3 ライフサイクル・サービスの OMG IDL
// ----- lcs.idl -----
#include "ns.idl"
module CosLifeCycle{
typedef CosNaming::Name Key;
typedef Object Factory;
typedef sequence<Factory> Factories;
exception NoFactory{ Key search_key; }
interface FactoryFinder {
Factories find_factories(in Key factory_key)
raises(NoFactory);
};
};
// この情報は、「CORBAservices: Common Object Services
// Specification」(1995 年 3 月 31 日改訂版、1997 年 11 月更新)
// の 6 〜 10 ページから、OMG の許可を得て転載
Tobj モジュールの OMG IDL
リスト 5-4 は、Tobj モジュールの OMG IDL を示します。
リスト 5-4 Tobj モジュールの OMG IDL
// ----- Tobj.idl -----
module Tobj {
// 定数
const string FACTORY_KIND = "FactoryInterface";
// 例外
exception CannotProceed { };
exception InvalidDomain {};
exception InvalidName { };
exception RegistrarNotAvailable { };
// LifeCycle サービスへの拡張
struct FactoryComponent {
CosLifeCycle::Key factory_key;
CosLifeCycle::Factory factory_ior;
};
typedef sequence<FactoryComponent> FactoryListing;
interface FactoryFinder : CosLifeCycle::FactoryFinder {
CosLifeCycle::Factory find_one_factory(in CosLifeCycle::Key
factory_key)
raises (CosLifeCycle::NoFactory,
CannotProceed,
RegistrarNotAvailable);
CosLifeCycle::Factory find_one_factory_by_id(in string
factory_id)
raises (CosLifeCycle::NoFactory,
CannotProceed,
RegistrarNotAvailable);
CosLifeCycle::Factories find_factories_by_id(in string
factory_id)
raises (CosLifeCycle::NoFactory,
CannotProceed,
RegistrarNotAvailable);
FactoryListing list_factories()
raises (CannotProceed,
RegistrarNotAvailable);
};
};
別ドメイン内のファクトリのロケート
通常、FactoryFinder は自身と同じドメイン内にあるファクトリ・オブジェクトへのリファレンスを返します。しかし、FactoryFinder が存在しているドメイン以外のドメイン内のファクトリ・オブジェクトへのリファレンスを返すこともできます。これは、FactoryFinder に別ドメイン内のファクトリの情報が含まれている場合に実現可能です (図 5-3 参照)。FactoryFinderは、これらのほかのファクトリ・オブジェクトの場所を説明するコンフィギュレーション情報から、これらドメイン間のファクトリ・オブジェクトについて調べます。
FactoryFinder は、ファクトリ・オブジェクトをロケートする要求を受信すると、まず指定された基準に合致するファクトリ・オブジェクトへのリファレンスが存在するかどうかを判断する必要があります。基準に合致するファクトリ・オブジェクトの登録情報があれば、FactoryFinder はそれが現在のドメインから見てローカルな場所にあるのか、それとも別ドメインからのインポートを必要とするのかを判断する必要があります。ファクトリ・オブジェクトがローカル・ドメインからのものであれば、FactoryFinder はファクトリ・オブジェクトへのリファレンスをクライアントに返します。
図5-3 ドメイン間の FactoryFinder の対話
その一方で、もしその情報が、実際のファクトリ・オブジェクトが別ドメインからのものであることを示していれば、FactoryFinder は要求を適切なドメインにあるドメイン間の FactoryFinder に委譲します。その結果、ファクトリ・オブジェクトと同じドメイン内の FactoryFinder のみが、ファクトリ・オブジェクトへの実際のリファレンスを含むこととなります。ドメイン間の FactoryFinder は、ファクトリ・オブジェクトのリファレンスをローカルの FactoryFinder に返す役割を果たします。そこからその要求は、クライアントに返されます。
BEA Tuxedo CORBA の拡張を使用する理由
BEA Tuxedo ソフトウェアは、Object Management Group の CORBAサービス仕様 (1997 年 12 月) の第 6 章「Life Cycle Service」で定義されているインターフェイスを、以下の理由により拡張しています。
したがって、BEA Tuxedo は FactoryFinder を使いやすくするために、CORBA サービスの仕様で定義されているインターフェイスを拡張します。拡張は、CORBA サービスの仕様で指定されたインターフェイスから派生する、FactoryFinder の高度化したインターフェイスとなります。
アプリケーション・ファクトリ・キーの作成
FactoryFinder インターフェイスで提供される 5 つのメソッドのうち 2 つが、CosNaming::Name
に対応する CosLifeCycle::Keys
を受け付けます。クライアントは、これらのキーを構築できなければなりません。
CosNaming の仕様では、CosLifeCycle::Keys
の作成と操作に使用可能な名前ライブラリ・インターフェイスを構成する、2 つのインターフェイスが説明されています。これらのインターフェイスの擬似 OMG IDL 文については、次の節で説明します。
名前ライブラリ・インターフェイスの擬似 OMG IDL
注記 この情報は、「CORBAservices: Common Object Services Specification」(1995 年 3 月 31 日改訂版、1997 年 11 月更新) の 3-14 〜 3-18 ページから、OMG の許可を得て転載しています。
既存のクライアント・アプリケーションに影響を与えることなく名前の表現を生成するには、名前の表現をクライアント・アプリケーションから認識できないようにしたほうがよいでしょう。名前自体がオブジェクトとなることが理想ですが、名前は作成、操作、送信が効率的に行える、ライトウェイトのエンティティでなければなりません。したがって、名前は名前ライブラリからプログラムに提示されます。
名前ライブラリは、名前を擬似オブジェクトとしてインプリメントします。クライアント・アプリケーションは、通常のオブジェクトを呼び出す場合と同じやり方で、擬似オブジェクトに対し呼び出しを行います。ライブラリ名は、擬似 IDL で記述されます。これにより、適切な言語バインディングが示唆されます。C++ クライアント・アプリケーションは、擬似 IDL (PIDL) でも、IDL の場合と同じクライアント言語バインディングを使用します。
擬似オブジェクト・リファレンスは、OMG IDL インターフェイス間で渡すことはできません。「CORBAservices: Common Object Services Specification」の第 3 章の「The CosNaming Module」で説明されるように、CORBA サービス・ネーミング・サービスは、NamingContext OMG IDL インターフェイスをサポートしています。名前ライブラリは、NamingContext インターフェイスを通じてライブラリ名をネーム・サービスに渡せる値に変換するオペレーションをサポートしています。
注記 CORBA サービス・ネーミング・サービスを使用するのに、名前ライブラリの使用は必須ではありません。
名前ライブラリは、リスト 5-5 に示すように LNameComponent インターフェイスおよび LName インターフェイスという 2 つの擬似 IDL インターフェイスで構成されています。
リスト 5-5 擬似 IDL による名前ライブラリ・インターフェイス
interface LNameComponent { // PIDL
const short MAX_LNAME_STRLEN = 128;
exception NotSet{ };
exception OverFlow{ };
string get_id
raises (NotSet);
void set_id(in string i)
raises (OverFlow);
string get_kind()
raises(NotSet);
void set_kind(in string k)
raises (OverFlow);
void destroy();
};
interface LName { // PIDL
exception NoComponent{ };
exception OverFlow{ };
exception InvalidName{ };
LName insert_component(in unsigned long i,
in LNameComponent n)
raises (NoComponent, OverFlow);
LNameComponent get_component(in unsigned long i)
raises (NoComponent);
LNameComponent delete_component(in unsigned long i)
raises (NoComponent);
unsigned long num_components();
boolean equal(in LName ln);
boolean less_than(in LName ln);
Name to_idl_form()
raises (InvalidName);
void from_idl_form(in Name n);
void destroy();
};
LName create_lname(); // C/C++
LNameComponent create_lname_component(); // C/C++
ライブラリ名コンポーネントの作成
ライブラリ名コンポーネントの擬似オブジェクトを作成するには、次の C/C++ 関数を使用します。
LNameComponent create_lname_component(); // C/C++
返された擬似オブジェクトは、その後 リスト 5-5 に示すオペレーションを使用して、操作できます。
ライブラリ名の作成
ライブラリ名の擬似オブジェクトを作成するには、次の C/C++ 関数を使用します。
LName create_lname(); // C/C++
返された擬似オブジェクト・リファレンスは、その後 リスト 5-5 に示すオペレーションを使用して、操作できます。
LNameComponent インターフェイス
名前コンポーネントは、identifier
および kind
という 2 つの属性で構成されています。LNameComponent インターフェイスは、次のように、これらの属性と関連付けられたオペレーションを定義します。
string get_id()
raises(NotSet);
void set_id(in string k);
string get_kind()
raises(NotSet);
void set_kind(in string k);
get_id
get_id
オペレーションは、identifier
属性の値を返します。属性が設定されていなければ、NotSet
例外が発生します。
set_id
set_id
オペレーションは、identifier
属性を文字列引数に設定します。
get_kind
get_kind
オペレーションは、kind
属性の値を返します。属性が設定されていなければ、NotSet
例外が発生します。
set_kind
set_kind
オペレーションは、kind
属性を文字列引数に設定します。
LName インターフェイス
この節では、以下のオペレーションについて説明します。
ライブラリ名コンポーネント擬似オブジェクトの破棄
destroy
オペレーションは、ライブラリ名コンポーネント擬似オブジェクトを破棄します。
void destroy();
名前コンポーネントの挿入
名前には、1 つまたは複数のコンポーネントがあります。各コンポーネントは、最後のもの以外は、サブコンテキストの名前を識別するために使用されます。最後のコンポーネントは、バウンド・オブジェクトを示します。insert_component
オペレーションは、位置 i
の後にコンポーネントを挿入します。
LName insert_component(in unsigned long i, in LNameComponent lnc)
raises(NoComponent, OverFlow);
コンポーネント i
-1 が未定義で、コンポーネント i
が 1 より大きい場合、insert_component
オペレーションは、NoComponent
例外を生成します。
ライブラリが、挿入されたコンポーネントに資源を割り当てられない場合は、OverFlow
例外が発生します。
i 番目の名前コンポーネントの取得
get_component
オペレーションは、i
番目のコンポーネントを返します。最初のコンポーネントの番号を「1」とします。
LNameComponent get_component(in unsigned long i)
raises(NoComponent);
コンポーネントが存在しない場合は、NoComponent
例外が発生します。
名前コンポーネントの削除
delete_component
オペレーションは、i
番目のコンポーネントを削除して返します。
LNameComponent delete_component(in unsigned long i)
raises(NoComponent);
コンポーネントが存在しない場合は、NoComponent
例外が発生します。
delete_component
オペレーションの実行後は、複合名のコンポーネントが 1 つ減り、それまで i
+1...n と認識されてきたコンポーネントが、i
...n-1 と認識されるようになります。
名前コンポーネントの数
num_components
オペレーションは、ライブラリ名に含まれるコンポーネントの数を返します。
unsigned long num_components();
等価性のテスト
equal オペレーションは、ライブラリ名 ln
との等価性をテストします。
boolean equal(in LName ln);
順序のテスト
less_than
オペレーションは、ライブラリ名 ln
に対しての、ライブラリ名の順序をテストします。
boolean less_than(in LName ln);
このオペレーションは、ライブラリ名が、引数として渡されたライブラリ名 ln
よりも小さい値の場合に、TRUE
を返します。ライブラリのインプリメンテーションは、名前の順序付けを定義します。
OMG IDL 形式の生成
擬似オブジェクトは、OMG IDL インターフェイス間で渡すことはできません。ライブラリ名は、擬似オブジェクトです。したがって、CORBA サービス・ネーミング・サービスの OMG IDL インターフェイスを越えて渡すことはできません。NamingContext インターフェイスのいくつかのオペレーションには、OMG IDL 定義の構造体 Name
の引数があります。ライブラリ名に対する次の PIDL オペレーションは、OMG IDL 要求にわたって渡すことが可能な構造体を生成します。
Name to_idl_form()
raises(InvalidName);
名前の長さが 0 (ゼロ) の場合、InvalidName
例外が返されます。
IDL 形式の変換
擬似オブジェクトは、OMG IDL インターフェイス間で渡すことはできません。ライブラリ名は、擬似オブジェクトです。したがって、CORBA サービス・ネーミング・サービスの OMG IDL インターフェイスを越えて渡すことはできません。NamingContext インターフェイスは、Name
型の IDL struct を返すオペレーションを定義します。ライブラリ名に対する次の PIDL オペレーションは、返された OMG IDL 構造体 Name
からのライブラリ名のコンポーネントおよび kind
属性を設定します。
void from_idl_form(in Name n);
ライブラリ名擬似オブジェクトの破棄
destroy
オペレーションは、ライブラリ名擬似オブジェクトを破棄します。
void destroy();
C++ マッピング
名前ライブラリの擬似 OMG IDL インターフェイスは、リスト 5-6 に示す C++ クラスにマッピングします。このリストは、NamesLib.h
ヘッダ・ファイルにあります。
スケーラビリティをサポートするために、CORBA に対する 2 つの BEA Tuxedo 拡張が含まれています。具体的には、入力文字列の長さが MAX_LNAME_STRLEN
を超えると、LNameComponent::set_id()
メソッドおよび LNameComponent::set_kind()
メソッドが、OverFlow
例外を生成します。この長さは、BEA Tuxedo オブジェクト ID (OID) およびインターフェイス名の最大長に一致します。ライブラリ名クラスの詳細については、「名前ライブラリ・インターフェイスの擬似 OMG IDL」を参照してください。
リスト 5-6 ライブラリ名クラス
const short MAX_LNAME_STRLEN = 128;
class LNameComponent {
public:
class NotSet{ };
class OverFlow{ };
static LNameComponent* create_lname_component();
void destroy();
const char* get_id() const throw (NotSet);
void set_id(const char* i) throw (OverFlow);
const char* get_kind() const throw (NotSet);
void set_kind(const char* k) throw (OverFlow);
};
class LName {
public:
class NoComponent{ };
class OverFlow{ };
class InvalidName{ };
static LName* create_lname();
void destroy();
LName* insert_component(const unsigned long i,
LNameComponent* n)
throw (NoComponent, OverFlow);
const LNameComponent* get_component(
const unsigned long i) const
throw (NoComponent);
const LNameComponent* delete_component(
const unsigned long i)
throw (NoComponent);
unsigned long num_components() const;
CORBA::Boolean equal(const LName* ln) const;
CORBA::Boolean less_than(
const LName* ln) const; // インプリメントされていない
CosNaming::Name* to_idl_form()
throw (InvalidName);
void from_idl_form(const CosNaming::Name& n);
};
Java マッピング
名前ライブラリ擬似 OMG IDL インターフェイスは、リスト 5-7 で示す com.beasys.Tobj
パッケージに含まれている Java クラスにマッピングします。例外はすべて、同じパッケージ内に包含されています。
ライブラリ名クラスの詳細については、「CORBAservices: Common Object Services Specification」の第 3 章を参照してください。
リスト 5-7 LNameComponent の Java マッピング
public class LNameComponent {
public static LNameComponent create_lname_component();
public static final short MAX_LNAME_STRING = 128;
public void destroy();
public String get_id() throws NotSet;
public void set_id(String i) throws OverFlow;
public String get_kind() throws NotSet;
public void set_kind(String k) throws OverFlow;
};
public class LName {
public static LName create_lname();
public void destroy();
public LName insert_component(long i, LNameComponent n)
throws NoComponent, OverFlow;
public LNameComponent get_component(long i)
throws NoComponent;
public LNameComponent delete_component(long i)
throws NoComponent;
public long num_components();
public boolean equal(LName ln);
public boolean less_than(LName ln); // インプリメントされていない
public org.omg.CosNaming.NameComponent[] to_idl_form()
throws InvalidName;
public void from_idl_form(org.omg.CosNaming.NameComponent[] nr);
};
C++ メンバ関数と Java メソッド
この節では、FactoryFinder の C++ メンバ関数と Java メソッドについて説明します。
注記 LName の less_than
メンバ関数を除き、FactoryFinder メンバ関数はすべて、C++ でも Java でもインプリメントされます。
ここでは、以下のメソッドについて説明します。
CosLifeCycle::FactoryFinder::find_factories
Tobj::Factoryfinder::find_one_factory
Tobj::Factoryfinder::find_one_factory_by_id
Tobj::Factoryfinder::find_factories_by_id
Tobj::Factoryfinder::list_factories
注記 CosLifeCycle::FactoryFinder::find_factories
メソッドは、標準的な CORBA CosLifeCycle メソッドです。4 つの Tobj メソッドは、CosLifeCycle インターフェイスに対する拡張であり、したがって、CosLifeCycle インターフェイスの属性を継承しています。
CosLifeCycle::FactoryFinder::find_factories
概要
ファクトリ・オブジェクト・リファレンスのシーケンスを取得します。
C++ マッピング
CosLifeCycle::Factories *
CORBA::Object_ptr CosLifeCycle::FactoryFinder::find_factories(
const CosNaming::Name& factory_key)
throw (CosLifeCycle::NoFactory);
Java マッピング
import org.omg.CosLifeCycle.*;
public org.omg.CORBA.Object[] find_factories(
org.omg.CosNaming.NameComponent[] factory_key)
throws org.omg.CosLifeCycle.NoFactory;
パラメータ
factory_key
このパラメータは、ファクトリ・オブジェクト・リファレンスを一意に識別する、NameComponents (<id, kind> ペアのタプル) のアンバウンディッド・シーケンスです。
NameComponent は、id
および kind
の 2 つのメンバを持つものとして定義されます。これらのメンバは双方とも、文字列型です。id
フィールドは、ファクトリ・オブジェクトの ID を表すのに使用されます。kind
フィールドは、id
フィールドの値をどのように解釈するかを示すのに使用されます。
オペレーション TP::register_factory
を使用して登録されたファクトリ・オブジェクトへのリファレンスの kind 値は、"FactoryInterface"
となります。
例外
CORBA::BAD_PARAM
入力パラメータの値が、不適切であるか無効であることを示します。特に重要なのは、この例外がパラメータ factory_key
に指定された値が存在しないか、NULL 値であった場合に発生するということです。
CosLifeCycle::NoFactory
factory_key
パラメータの情報に一致するファクトリが登録されていないことを示します。
説明
アプリケーションによって find_factories
メソッドが呼び出され、ファクトリ・オブジェクト・リファレンスのシーケンスが取得されます。オペレーションには、必要なファクトリを識別するキーが渡されます。このキーは、CORBA サービス・ネーミング・サービスで定義した名前です。キーに一致するファクトリは複数存在することがあります。そのような場合、FactoryFinder はファクトリのシーケンスを返します。
このキーのスコープは、FactoryFinder です。FactoryFinder は、キーにセマンティクスを割り当てません。単に、キーを照合するだけです。インターフェイスや返されたファクトリのインプリメンテーション、または作成するオブジェクトについての保証も行いません。
キー値が等価であると見なされるのは、長さが等しい、つまりシーケンス中のエレメント数が同じである場合と、キーの中の各 NameComponent 値がすべて、ファクトリ・オブジェクトへのリファレンス登録時に指定されたキーの中のまったく同じ場所にある対応の NameComponent 値に一致する場合です。
戻り値
factory_key
パラメータの値として指定された情報に一致する、ファクトリ・オブジェクトへのリファレンスのアンバウンディッド・シーケンスです。C++ では、メソッドは CosLifeCycle::Factory
型のオブジェクト・リファレンスのシーケンスを返します。Java では、メソッドは org.omg.CORBA.Object
型のオブジェクト・リファレンスのアンバウンディッド配列を返します。
オペレーションが例外を生成した場合には、戻り値は無効であり、呼び出し側によって解放される必要はありません。
factory_key
このパラメータは、ファクトリ・オブジェクト・リファレンスを一意に識別する、NameComponents (<id, kind> ペアのタプル) のアンバウンディッド・シーケンスです。
NameComponent は、id
および kind
の 2 つのメンバを持つものとして定義されます。これらのメンバは双方とも、文字列型です。id
フィールドは、ファクトリ・オブジェクトの ID を表すのに使用されます。kind
フィールドは、id
フィールドの値をどのように解釈するかを示すのに使用されます。
オペレーション TP::register_factory
を使用して登録されたファクトリ・オブジェクトへのリファレンスの kind 値は、"FactoryInterface
" となります。
CORBA::BAD_PARAM
入力パラメータの値が、不適切であるか無効であることを示します。特に重要なのは、この例外がパラメータ factory_key
に指定された値が存在しないか、NULL 値であった場合に発生するということです。
CosLifeCycle::NoFactory
factory_key
パラメータの情報に一致するファクトリが登録されていないことを示します。
FactoryFinder または NameManager が、ファクトリ・オブジェクトに対するリファレンスを見つけようとしているときに内部エラーに遭遇したことを示します。
エラー情報は、ユーザ・ログに書き込まれます。
FactoryFinder が NameManager と通信できなかったことを示します。
エラー情報は、ユーザ・ログに書き込まれます。
アプリケーションにより find_one_factory
メソッドが呼び出され、メソッドへの入力として指定されたキーの値と一致するキーを備えた唯一のファクトリ・オブジェクトへのリファレンスが取得されます。指定されたキーで複数のファクトリ・オブジェクトが登録されている場合、FactoryFinder のロード・バランシング・スキーマに基づき、FactoryFinder はファクトリ・オブジェクトを 1 つ選択します。その結果、同じキーで find_one_factory
メソッドを複数回、呼び出すと、さまざまなオブジェクト・リファレンスが返ることがあります。
このキーのスコープは、FactoryFinder です。FactoryFinder は、キーにセマンティクスを割り当てません。単に、キーを照合するだけです。インターフェイスや返されたファクトリのインプリメンテーション、または作成するオブジェクトについての保証も行いません。
キー値が等価であると見なされるのは、長さが等しい、つまりシーケンス中のエレメント数が同じである場合と、キーの中の各 NameComponent 値がすべて、ファクトリ・オブジェクトへのリファレンス登録時に指定されたキーの中のまったく同じ場所にある、対応する NameComponent 値に一致する場合です。
ファクトリ・オブジェクトのオブジェクト・リファレンスです。C++ では、メソッドは CosLifeCycle::Factory
型のオブジェクト・リファレンスを返します。Java では、メソッドは org.omg.CORBA.Object
型のオブジェクト・リファレンスを返します。
オペレーションが例外を生成した場合には、戻り値は無効であり、呼び出し側によって解放される必要はありません。
Tobj::FactoryFinder::find_one_factory_by_id
概要
単一のファクトリ・オブジェクトへのリファレンスを取得します。
C++ マッピング
Java マッピング
public org.omg.CORBA.Object
find_one_factory_by_id( java.lang.String factory_id)
throws
org.omg.CosLifeCycle.NoFactory,
com.beasys.Tobj.CannotProceed,
com.beasys.Tobj.RegistrarNotAvailable;
パラメータ
factory_id
探している登録済みファクトリ・オブジェクトを識別するための値を含む、NULL で終了する文字列です。
factory_id
パラメータの値は、ファクトリ・オブジェクトに対する登録済みリファレンスと対比したときに値が "FactoryInterface"
となっている kind
フィールドを備える NameComponent の id
フィールドの値として使用されます。
例外
CORBA::BAD_PARAM
入力パラメータの値が、不適切であるか無効であることを示します。特に重要なのは、この例外がパラメータ factory_key
に指定された値が存在しないか、NULL 値であった場合に発生するということです。
CosLifeCycle::NoFactory
factory_key
パラメータの情報に一致するファクトリが登録されていないことを示します。
FactoryFinder または NameManager が、ファクトリ・オブジェクトに対するリファレンスを見つけようとしているときに内部エラーに遭遇したことを示します。
エラー情報は、ユーザ・ログに書き込まれます。
FactoryFinder が NameManager と通信できなかったことを示します。
エラー情報は、ユーザ・ログに書き込まれます。
説明
アプリケーションにより find_one_factory_by_id
メソッドが呼び出され、メソッドへの入力として指定された ID の値と一致する登録 ID を備えた唯一のファクトリ・オブジェクトへのリファレンスが取得されます。指定された ID で複数のファクトリ・オブジェクトが登録されている場合、FactoryFinder のロード・バランシング・スキーマに基づき、FactoryFinder はファクトリ・オブジェクトを 1 つ選択します。その結果、同じ ID で find_one_factory_by_id
オペレーションを複数回呼び出すと、さまざまなオブジェクト・リファレンスが返ることがあります。
find_one_factory_by_id
メソッドは、factory_id
パラメータと同じ値を含む id
フィールド、および値 "FactoryInterface"
を含む kind
フィールドを備えた単一の NameComponent が含まれるキーを渡された、find_one_factory
オペレーションと同じように振る舞います。
ファクトリの登録された識別子が factory_id
パラメータの値と等価であると見なされるのは、単一の NameComponent を含む CosLifeCycle::Key
構造体を構成した結果に、id
フィールドの値として factory_id
パラメータが、kind
フィールドの値として factory_id
パラメータが含まれる場合です。値は、大文字と小文字、場所など、すべての面で一致している必要があります。
戻り値
ファクトリ・オブジェクトに対するオブジェクト・リファレンスです。C++ では、メソッドは CosLifeCycle::Factory
型のオブジェクト・リファレンスを返します。Java では、メソッドは org.omg.CORBA.Object
型のオブジェクト・リファレンスを返します。
オペレーションが例外を生成した場合には、戻り値は無効であり、呼び出し側によって解放される必要はありません。
Tobj::FactoryFinder::find_factories_by_id
概要
1 つまたは複数のファクトリ・オブジェクト・リファレンスのシーケンスを取得します。
C++ マッピング
Java マッピング
public org.omg.CORBA.Object[]
find_factories_by_id( java.lang.String factory_id)
throws
org.omg.CosLifeCycle.NoFactory,
com.beasys.Tobj.CannotProceed,
com.beasys.Tobj.RegistrarNotAvailable;
パラメータ
factory_id
探している登録済みファクトリ・オブジェクトを識別するための値を含む、NULL で終了する文字列です。
factory_id
パラメータの値は、ファクトリ・オブジェクトに対する登録済みリファレンスと対比したときに値が "FactoryInterface"
となっている、kind
フィールドを備える NameComponent の、id
フィールドの値として使用されます。
例外
CORBA::BAD_PARAM
入力パラメータの値が、不適切であるか無効であることを示します。特に重要なのは、この例外が、パラメータ factory_key
に指定された値が存在しないか、NULL 値であった場合に発生するということです。
CosLifeCycle::NoFactory
factory_key
パラメータの情報に一致するファクトリが登録されていないことを示します。
FactoryFinder または NameManager が、ファクトリ・オブジェクトのリファレンスを見つけようとしているときに内部エラーに遭遇したことを示します。
エラー情報は、ユーザ・ログに書き込まれます。
FactoryFinder が NameManager と通信できなかったことを示します。
エラー情報は、ユーザ・ログに書き込まれます。
説明
アプリケーションによって find_factories_by_id
メソッドが呼び出され、1 つまたは複数のファクトリ・オブジェクト・リファレンスのシーケンスが取得されます。メソッドには、探しているファクトリの識別子が含まれた、NULL で終了する文字列が渡されます。指定した ID で登録されたファクトリ・オブジェクトが複数存在した場合、FactoryFinder は一致する登録済みオブジェクトのオブジェクト・リファレンスのリストを返します。
find_factories_by_id
メソッドは、factory_id
パラメータと同じ値を含む id
フィールドおよび値 "FactoryInterface"
を含む kind
フィールドを備えた単一の NameComponent が含まれるキーを渡された、find_factory
オペレーションと同じように振る舞います。
ファクトリの登録された識別子が factory_id
パラメータの値と等価であると見なされるのは、単一の NameComponent を含む CosLifeCycle::Key
構造体を構成した結果に、id
フィールドの値として factory_id
パラメータが、kind
フィールドの値として factory_id
パラメータが含まれる場合です。値は、大文字と小文字、場所など、すべての面で一致している必要があります。
戻り値
factory_key
パラメータの値として指定された情報に一致する、ファクトリ・オブジェクトへのリファレンスのアンバウンディッド・シーケンスです。C++ では、メソッドは CosLifeCycle::Factory
型のオブジェクト・リファレンスのシーケンスを返します。Java では、メソッドは org.omg.CORBA.Object
型のオブジェクト・リファレンスのアンバウンディッド配列を返します。
オペレーションが例外を生成した場合には、戻り値は無効であり、呼び出し側によって解放される必要はありません。
Tobj::Factoryfinder::list_factories
概要
現在 FactoryFinder で登録されているファクトリ・オブジェクトのリストを取得します。
C++ マッピング
virtual FactoryListing * list_factories() = 0;
Java マッピング
public com.beasys.Tobj.FactoryComponent[] list_factories()
throws
com.beasys.Tobj.CannotProceed,
com.beasys.Tobj.RegistrarNotAvailable;
例外
FactoryFinder または NameManager が、ファクトリ・オブジェクトのリファレンスを見つけようとしているときに内部エラーに遭遇したことを示します。
エラー情報は、ユーザ・ログに書き込まれます。
FactoryFinder が NameManager と通信できなかったことを示します。
エラー情報は、ユーザ・ログに書き込まれます。
説明
アプリケーションによって list_factories
メソッドが呼び出され、FactoryFinder で現在登録されているファクトリ・オブジェクトのリストが取得されます。メソッドは、ファクトリの登録に使用されるキーと、ファクトリ・オブジェクトへのリファレンスの両方を返します。
戻り値
Tobj::FactoryComponent
のアンバウンディッド・シーケンスです。シーケンス中の Tobj::FactoryComponent
の各オカレンスには、登録されたファクトリ・オブジェクトへのリファレンス、およびそのファクトリ・オブジェクトの登録に使用された CosLifeCycle::Key
が含まれます。
オペレーションが例外を生成した場合には、戻り値は無効であり、呼び出し側によって解放される必要はありません。
オートメーションのメソッド
ここでは、DITobj_FactoryFinder オートメーション・メソッドについて説明します。
DI
exceptionInfo
エラーが発生した場合にアプリケーションが追加の例外データを取得できるようにするオプションの入力引数。
DI.find_one_factory_by_id
概要
アプリケーション・ファクトリを 1 つ取得します。
MIDL マッピング
HRESULT find_one_factory_by_id(
[in] BSTR factory_id,
[in,out,optional] VARIANT* exceptionInfo,
[out,retval] IDispatch** returnValue);
オートメーション・マッピング
Function find_one_factory_by_id(factory_id As String,
[exceptionInfo]) As Object
パラメータ
factory_id
このパラメータは、アプリケーション・ファクトリの種類または型を識別するために使用される文字列識別子を表します。この文字列の構造については、『BEA Tuxedo CORBA サーバ・アプリケーションの開発方法』を参照してください。
exceptionInfo
エラーが発生した場合にアプリケーションが追加の例外データを取得できるようにするオプションの入力引数。
例外
NoFactory
この例外は、入力 factory_id
に対応するアプリケーション・ファクトリ・オブジェクト・リファレンスを FactoryFinder が見つけられない場合に発生します。
説明
このメンバ関数は、キーの id
がメソッドの入力 factory_id
に一致するアプリケーション・ファクトリ・オブジェクト・リファレンスを 1 つ返すように、FactoryFinder に指示します。等価性の照合も行います。つまり、入力 factory_id
は、アプリケーション・ファクトリのキーの <id,kind> ペアにおける id
に、完全に一致している必要があります。入力された factory_id
を含むファクトリ・キーが複数存在する場合、FactoryFinder は内部で定義されたロード・バランシング・スキーマに基づき、1 つを選択します。同じ id
で find_one_factory_by_id
を複数回呼び出すと、さまざまなオブジェクト・リファレンスが返ることがあります。
戻り値
DI.find_factories_by_id
概要
アプリケーション・ファクトリのリストを取得します。
MIDL マッピング
HRESULT find_factories_by_id(
[in] BSTR factory_id,
[in,out,optional] VARIANT* exceptionInfo,
[out,retval] VARIANT* returnValue);
オートメーション・マッピング
Function find_factories_by_id(factory_id As String,
[exceptionInfo])
パラメータ
factory_id
このパラメータは、アプリケーション・ファクトリの種類または型を識別するために使用される文字列識別子を表します。この文字列については、オンライン・マニュアル『BEA Tuxedo CORBA クライアント・アプリケーションの開発方法』に構成案をいくつか記載しています。
exceptionInfo
エラーが発生した場合にアプリケーションが追加の例外データを取得できるようにするオプションの入力引数。
例外
NoFactory
この例外は、入力された factory_key
または factory_id
に対応するアプリケーション・ファクトリ・オブジェクト・リファレンスを FactoryFinder が見つけられない場合に発生します。
説明
このメンバ関数は、キーの id
がメソッドの入力 factory_id
に一致する、アプリケーション・ファクトリ・オブジェクト・リファレンスのリストを返すように、FactoryFinder に指示します。等価性の照合も行います。つまり、入力 factory_id
は、アプリケーション・ファクトリのキーの <id,kind> ペアにおける id
に、完全に一致している必要があります。
戻り値
アプリケーション・ファクトリへのインターフェイス・ポインタの配列を含むバリアントを返します。
DI.find_factories
概要
アプリケーション・ファクトリのリストを取得します。
MIDL マッピング
HRESULT find_factories(
[in] VARIANT factory_key,
[in,out,optional] VARIANT* exceptionInfo,
[out,retval] VARIANT* returnValue);
オートメーション・マッピング
Function find_factories(factory_key, [exceptionInfo])
パラメータ
factory_key
このパラメータは、ファクトリ・オブジェクト・リファレンスを一意に識別する DICosNaming_NameComponents (<id, kind> 値のペア) のセーフ配列を含みます。
exceptionInfo
エラーが発生した場合にアプリケーションが追加の例外データを取得できるようにするオプションの入力引数。
例外
NoFactory
この例外は、入力された factory_key
に対応するアプリケーション・ファクトリ・オブジェクト・リファレンスを FactoryFinder が見つけられない場合に発生します。
説明
find_factories
メソッドは、キーがメソッドの入力キーと一致するサーバ・アプリケーション・ファクトリ・オブジェクト・リファレンスのリストを返すように、FactoryFinder に指示します。BEA Tuxedo システムでは、等価性の照合が行われることを想定しています。つまり、<id,kind> ペアの 2 つのシーケンス (入力キーに対応するものと、アプリケーション・ファクトリのキーに含まれるもの) のそれぞれが同じ長さであり、一方のシーケンスにあるペアはすべて、もう一方のペアにも同一のものが存在します。
戻り値
アプリケーション・ファクトリへのインターフェイス・ポインタの配列を含むバリアントを返します。
DI.list_factories
概要
アプリケーション・ファクトリ名とオブジェクト・リファレンスをすべてリストします。
MIDL マッピング
HRESULT list_factories(
[in,out,optional] VARIANT* exceptionInfo,
[out,retval] VARIANT* returnValue);
オートメーション・マッピング
Function list_factories([exceptionInfo])
パラメータ
exceptionInfo
エラーが発生した場合にアプリケーションが追加の例外データを取得できるようにするオプションの入力引数。
例外
CannotProceed
この例外が発生するのは、FactoryFinder または CORBA サービス・ネーミング・サービスが検索中に内部エラーに遭遇した場合です。エラーは、ユーザ・ログ (ULOG
) に書き込まれます。この例外が発生した場合は、すぐに作業担当者に通知されます。内部エラーの重要度によっては、FactoryFinder または CORBA サービス・ネーミング・サービスが実行されていたサーバが、終了していることがあります。FactoryFinder が終了した場合は、新規の FactoryFinder サービスを開始します。CORBA サービス・ネーミング・サービスの 1 つが終了しており、別の CORBA サービス・ネーミング・サービス は実行中である場合は、新規の CORBA サービス・ネーミング・サービス を開始します。稼動中のネーミング・サービス・サーバがない場合は、アプリケーションを再起動します。
RegistrarNotAvailable
この例外は、FactoryFinder が CORBA サービス・ネーミング・サービスのオブジェクトを見つけられない場合に発生します。この例外が発生した場合は、すぐに作業担当者に通知されます。稼動中のネーミング・サービス・サーバがない場合もあります。その場合は、アプリケーションを再起動します。
説明
このメソッドは、CORBA サービス・ネーミング・サービスで登録されているアプリケーション・ファクトリのファクトリ・キー、および関連するオブジェクト・リファレンスをすべて含むリストを返すよう、FactoryFinder に指示します。
戻り値
DITobj_FactoryComponent オブジェクトの配列を含むバリアントを返します。FactoryComponent オブジェクトは、DICosNaming_NameComponent オブジェクトの配列と、アプリケーション・ファクトリへのインターフェイス・ポインタを含むバリアントで構成されます。
プログラミング例
この節では、FactoryFinder インターフェイスを使用してプログラミングを行う方法について説明します。
注記 コード内の例外を確認するよう留意してください。
FactoryFinder オブジェクトの使用
ファクトリ・オブジェクトへのリファレンスを見つけるには、プログラマは FactoryFinder オブジェクトを使用します。FactoryFinder オブジェクトは、指定した基準に基づき、ファクトリ・オブジェクトへの 1 つまたは複数のリファレンスを取得するオペレーションを提供します。
プロセス・アドレス領域には、複数の FactoryFinder オブジェクトが存在できます。FactoryFinder オブジェクトへの複数リファレンスをサポートする必要があります。FactoryFinder オブジェクトは、ドメイン内の FactoryFinder オブジェクトと、ドメインへのアクセスに使用する特定の IIOP サーバ・リスナ/ハンドラ (ISL/ISH) の間の関係についての状態を維持するという点では、半ば状態を持つオブジェクトです。
Object Management Group のCORBA サービス仕様 (1997 年 12 月) の第 6 章「Life Cycle Service」で定義されているように、FactoryFinder オブジェクトはすべて CosLifeCycle::FactoryFinder
インターフェイスをサポートしています。このインターフェイスは、指定した基準に合致するファクトリ・オブジェクトへの 1 つまたは複数のリファレンスを取得するために使用されるオペレーションを 1 つ含みます。
ファクトリ・オブジェクトへのリファレンスの登録
次のコードの抜粋 (リスト 5-8) では、TP フレームワーク・インターフェイスを使用して、FactoryFinder でファクトリ・オブジェクトへのリファレンスを登録する方法を示します。
リスト 5-8 サーバ・アプリケーション: ファクトリの登録
// サーバ・アプリケーション: ファクトリの登録
// C++ の例
TP::register_factory( factory_obj.in( ), "TellerFactory" );
CosLifeCycle::FactoryFinder インターフェイスを使用した FactoryFinder オブジェクトへのリファレンスの取得
次のコードの抜粋 (リスト 5-9) は、CORBA 準拠のインターフェイスを使用してファクトリ・オブジェクトへの 1 つまたは複数のリファレンスを取得する方法を示します。
リスト 5-9 クライアント・アプリケーション: FactoryFinder オブジェクト・リファレンスの取得
// クライアント・アプリケーション: ファクトリ・オブジェクトへの
// オブジェクト・リファレンスの取得
CosLifeCycle::Key_var factory_key = new CosLifeCycle::Key( );
factory_key ->length(1);
factory_key[0].id = string_dupalloc( "strlen("TellerFactory") +1 );
factory_key[0].kind = string_dupalloc(
strlen(""FactoryInterface") + 1);
strcpy( factory_key[0].id, ""TellerFactory" );
strcpy( facory_key[0].kind, "FactoryInterface" );
CosLifeCycle::Factories_var * flp = ff_np ->
find_factories( factory_key.in( ) );
拡張 Bootstrap オブジェクトを使用した FactoryFinder オブジェクトへのリファレンスの取得
次のコードの抜粋 (リスト 5-10) は、BEA Tuxedo 拡張 Bootstrap オブジェクトを使用して FactoryFinder オブジェクトへのリファレンスを取得する方法を示したものです。
リスト 5-10 クライアント・アプリケーション: Tobj の手法を使用して、1 つのファクトリを見つける
// クライアント・アプリケーション: Tobj の手法を使用して、
// 1 つのファクトリを見つける
Tobj_Bootstrap * bsp = new Tobj_Bootstrap(
orb_ptr.in( ), host_port );
CORBA::Object_varptr ff_op = bsp ->
resolve_initial_references( "FactoryFinder" );
Tobj::FactoryFinder_ptrvar ff_np =
Tobj::FactoryFinder::_narrow( ff_op );
注記 Tobj_Bootstrap オブジェクトを使用する場合は、CosLifeCycle::FactoryFinder
インターフェイスに BEA Tuxedo CORBA の拡張を使用できますが、このオブジェクトはファクトリを見つけるために必須のものではありません。CORBA INS を使用していれば、CosLifeCycle::FactoryFinder
インターフェイスにより提供される find_factories()
メソッドを使用できます。
FactoryFinder オブジェクトに対する拡張の使用
BEA Tuxedo では、CORBA で定義されるオペレーションと類似の機能をサポートするように、FactoryFinder オブジェクトを拡張します。ただしこちらでは、大幅に簡素化されており、より限定的であるシグニチャが使われます。拡張機能は、Tobj::FactoryFinder
インターフェイスを定義することによって提供されます。Tobj::FactoryFinder
インターフェイス用に定義されたオペレーションは、CORBA で定義される同等の機能を、焦点を絞って簡素化した形態で提供することを意図しています。アプリケーション開発者は、開発時に、CORBA 定義の拡張を使用するか、BEA Tuxedo の拡張を使用するかを選択できます。インターフェイス Tobj::FactoryFinder
は、CosLifeCycle::FactoryFinder
インターフェイスから派生しています。
FactoryFinder オブジェクトへの BEA Tuxedo の拡張は、Object Management Group の CORBA サービス仕様 (1997 年 12 月) の第 6 章「Life Cycle Service」で定義されている FactoryFinder オブジェクトとすべて同じ規則に準拠しています。
拡張された FactoryFinder オブジェクトのインプリメンテーションでは、ユーザが CORBA 定義の CosLifeCycle::FactoryFinder
インターフェイスでのように CosLifeCycle::Key
を指定するか、または探しているファクトリ・オブジェクトの識別子を含んだ NULL で終了する文字列を指定する必要があります。
Tobj::FactoryFinder を使用しての、1 つのファクトリの取得
次のコードの抜粋 (リスト 5-11) では、BEA Tuxedo 拡張インターフェイスを使用して、識別子に基づき、ファクトリ・オブジェクトへのリファレンスを 1 つ取得する方法を示します。
リスト 5-11 クライアント・アプリケーション: BEA Tuxedo 拡張の手法をを使用して、1 つのファクトリを見つける
CosLifeCycle::Factory_ptrvar fp_obj = ff_np ->
find_one_factory_by_id( "TellerFactory" );
Tobj::FactoryFinder を使用しての、1 つまたは複数のファクトリの取得
次のコードの抜粋 (リスト 5-12) では、BEA Tuxedo 拡張を使用して、識別子に基づき、ファクトリ・オブジェクトへの1 つまたは複数のリファレンスを取得する方法を示します。
リスト 5-12 クライアント・アプリケーション: BEA Tuxedo 拡張の手法をを使用して、1 つまたは複数のファクトリを見つける
CosLifeCycle::Factories * _var flp = ff_np ->
find_factories_by_id( "TellerFactory" );
![]() |
![]() |
![]() |
|
Copyright © 2001, BEA Systems, Inc. All rights reserved.
|