目次 前 次 PDF


FactoryFinderインタフェース

FactoryFinderインタフェース
FactoryFinderインタフェースは、Oracle Tuxedoドメインへの唯一のエントリ・ポイントとして機能する1つのオブジェクト参照をクライアントに提供します。Oracle Tuxedo NameManagerは、FactoryFinderのオブジェクト参照へのファクトリ名のマッピングを提供します。複数のFactoryFinderとNameManagerを組み合せると、可用性と信頼性が向上します。このリリースでは、複数ドメインをサポートするように機能性のレベルが拡張されています。
注意:
Oracle Tuxedo環境では、アプリケーション・ファクトリ・オブジェクトを使用して、クライアントがビジネス操作(TellerFactory、Tellerなど)の実行のためにやり取りするオブジェクトを作成します。アプリケーション・ファクトリは通常、サーバーの初期化中に作成され、リモート・クライアントと、サーバー・アプリケーション内にあるクライアントの両方からアクセスされます。
FactoryFinderインタフェースとNameManagerサービスは、アプリケーション・サーバーではない個別のサーバーに格納されています。クライアント・とサーバーの両方のアプリケーションがファクトリ情報にアクセスしてこれを更新できるように、アプリケーション・プログラミング・インタフェース(API)のセットが提供されています。
このリリースにおける複数ドメインのサポートは、多数のマシンを使用するようにスケーリングしたり、アプリケーション環境を分割する必要がある顧客に役立ちます。複数ドメインをサポートするために、Oracle Tuxedo環境でファクトリの検索に使用されるメカニズムが強化されて、あるドメイン内のファクトリを別のドメインで認識できるようになっています。他のドメイン内のファクトリを認識できるかどうかは、システム管理者によって制御されます。
機能、制限事項、および要件
サーバー・アプリケーションの初期化中に、アプリケーション・ファクトリをNameManagerに登録する必要があります。それにより、クライアントにFactoryFinderのオブジェクト参照を提供し、それらがファクトリ登録時に作成された関連する名前に基づくファクトリ・オブジェクト参照を取得することを可能にします。
以下の機能、制限事項、および要件が、このリリースに適用されます。
FactoryFinderインタフェースは、CosLifeCycle::FactoryFinderインタフェースに準拠しています。
機能説明
Oracle Tuxedo CORBA環境では、クライアントがオブジェクトへの参照を取得するための主な手段としてファクトリ・デザイン・パターンの使用が促進されます。このデザイン・パターンを使用することにより、クライアント・アプリケーションには、別のオブジェクトのファクトリとして動作するオブジェクトへの参照を取得するメカニズムが必要となります。Oracle 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へのリファレンスを返します。Oracle Tuxedoクライアント・ソフトウェアを使用している場合は、このメカニズムを使用します。詳細は、「Tobj_Bootstrap::resolve_initial_references」という項を参照してください。
"FactoryFinder"を指定してCORBA::ORB::resolve_initial_references操作を呼び出します。この操作は、クライアント・アプリケーションが現在属しているドメイン内のFactoryFinderへのリファレンスを返します。サード・パーティ製のクライアントORBを使用している場合は、このメカニズムを使用します。詳細は、「CORBA::ORB::resolve_initial_references」という項を参照してください。
注意:
ファクトリの登録
クライアント・アプリケーションがファクトリへの参照を取得できるようにするには、アプリケーション・サーバーが、実装を提供するファクトリ・オブジェクトへの参照をFactoryFinderに登録する必要があります(図5-1を参照)。Oracle 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 ファクトリ登録の擬似OMG IDLのC++マッピング
#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 ファクトリ・オブジェクトの検索
Oracle 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インタフェースのOracle Tuxedo CORBA拡張を使用できますが、Tobj_Bootstrapオブジェクトはファクトリを検索するために必須のものではありません。CORBA INSを使用していれば、CosLifeCycle::FactoryFinderインタフェースにより提供されるfind_factories()メソッドを使用できます。
CosLifeCycle::FactoryFinderインタフェースはfactory_keyを定義します。これは、次に示すCosNaming名に準拠したid文字列およびkind文字列のシーケンスです。アプリケーション・ファクトリの登録時に、TPフレームワークによって、全アプリケーション・ファクトリのNameComponentにおけるkindフィールドが、文字列FactoryInterfaceに設定されます。アプリケーションは、idフィールドの値を自身で指定します。
次の各リストには、CORBAサービス・ライフサイクル・サービスのモジュールが独自のファイル(それぞれns.idlおよびlcs.idl)に格納されていると仮定して、両方のファイルのサブセットのうち、Oracle Tuxedo FactoryFinderの使用に関連したサブセットのOMG IDLコードのみが示されています。
CORBAサービス・ネーミング・サービス・モジュールのOMG IDL
リスト5-2に、ns.idlファイルの、FactoryFinderに関連した部分を示します。
リスト5-2 CORBAサービス・ネーミングのOMG IDL
// ------ ns.idl ------
module CosNaming {
typedef string Istring;
struct NameComponent {
Istring id;
Istring kind;
};
typedef sequence <NameComponent> Name;
};
// This information is taken from CORBAservices: Common Object
// Services Specification
, page 3-6.Revised Edition:
// March 31, 1995.更新: 1997年11月。また、この情報は、OMGの権限を得て転載しています。
 
CORBAサービス・ライフサイクル・サービス・モジュールのOMG IDL
リスト5-3に、lcs.idlファイルの、FactoryFinderに関連した部分を示します。
リスト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);
};
};
// This information is taken from CORBAservices: Common Object
// Services Specification
, pages 6-10, 11.Revised Edition:
// March 31, 1995.更新: 1997年11月。また、この情報は、OMGの権限を得て転載しています。
 
TobjモジュールのOMG IDL
リスト5-4に、TobjモジュールのOMG IDLを示します。
リスト5-4 TobjモジュールのOMG IDL
// ----- Tobj.idl -----
module Tobj {
// Constants
const string FACTORY_KIND = "FactoryInterface";
// Exceptions
exception CannotProceed { };
exception InvalidDomain {};
exception InvalidName { };
exception RegistrarNotAvailable { };
// Extension to LifeCycle Service
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が存在するドメイン以外のドメイン内のファクトリ・オブジェクトへの参照を返すこともあります。これは、FactoryFinderに、別のドメインに存在するファクトリに関する情報が格納されている場合に発生することがあります(図5-3を参照)。FactoryFinderは、これらのほかのファクトリ・オブジェクトの場所を説明する構成情報から、これらドメイン間のファクトリ・オブジェクトについて調べます。
FactoryFinderがファクトリ・オブジェクトを検索するリクエストを受信すると、まず、指定された基準に合致するファクトリ・オブジェクトへの参照が存在するかどうかを判別する必要があります。基準に合致するファクトリ・オブジェクトの登録情報がある場合は、FactoryFinderは、そのファクトリ・オブジェクトが現在のドメインに対してローカルであるか、別のドメインからインポートする必要があるかを判別する必要があります。ファクトリ・オブジェクトがローカル・ドメインのものである場合、FactoryFinderはファクトリ・オブジェクトへの参照をクライアントに返します。
図5-3 ドメイン間のFactoryFinderの対話
一方、実際のファクトリ・オブジェクトが別のドメインのものであることをその情報が示している場合、FactoryFinderは、リクエストを適切なドメインにあるドメイン間のFactoryFinderに委任します。その結果、ファクトリ・オブジェクトと同じドメインにあるFactoryFinderのみに、ファクトリ・オブジェクトへの実際の参照が含まれます。ドメイン間のFactoryFinderがファクトリ・オブジェクトの参照をローカルのFactoryFinderに返し、ローカルのFactoryFinderが参照をクライアントに返します。
Oracle Tuxedo CORBAの拡張を使用する理由
Oracle Tuxedoソフトウェアは、Object Management GroupのCORBAサービス仕様(1997年12月)の第6章「Life Cycle Service」で定義されているインタフェースを、以下の理由により拡張しています。
そのため、Oracle 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』の3-14から18のページから引用したものです。改訂版: 1995年3月31日更新: 1997年11月。また、この情報は、OMGの権限を得て転載しています。
既存のクライアント・アプリケーションに影響を及ぼすことなく名前の表現を拡張するには、名前の表現をクライアント・アプリケーションから認識できないようにすることが望ましい方法です。名前自体がオブジェクトであることが理想ですが、名前は、作成、操作および送信を効率的に行える軽量のエンティティである必要があります。したがって、名前は名前ライブラリを通じてプログラムに提示されます。
名前ライブラリは、名前を擬似オブジェクトとして実装します。クライアント・アプリケーションは、通常のオブジェクトを呼び出す場合と同じ方法で擬似オブジェクトを呼び出します。ライブラリ名は、擬似IDLで記述されます(適切な言語バインディングを提示するため)。C++クライアント・アプリケーションは、IDLに使用するものと同じクライアント言語バインディングを擬似IDL (PIDL)に使用します。
擬似オブジェクト参照をOMG IDLインタフェース間で渡すことはできません。『CORBAservices: Common Object Services Specification』の第3章の「The CosNaming Module」という項に記載されているように、CORBAサービス・ネーミング・サービスは、NamingContext OMG IDLインタフェースをサポートしています。名前ライブラリは、NamingContextインタフェースを通じてライブラリ名をネーム・サービスに渡せる値に変換する操作をサポートしています。
注意:
名前ライブラリは、リスト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インタフェース
名前コンポーネントは、identifierkindという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インタフェース
このセクションでは、以下の操作について説明します。
i番目の名前コンポーネントの取得
ライブラリ名コンポーネント擬似オブジェクトの破棄
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構造体を返す操作を定義します。ライブラリ名に対する次の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つのOracle Tuxedo拡張が含まれています。具体的には、入力文字列の長さがMAX_LNAME_STRLENを超えると、LNameComponent::set_id()およびLNameComponent::set_kind()メソッドはOverFlow例外を生成します。この長さは、Oracle 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; // not implemented
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); // not implemented
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メソッドは、標準の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は、どちらも文字列型であるidkindという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型のオブジェクト参照の無制限配列を返します。
操作が例外を生成した場合には、戻り値は無効であり、呼出し側によって解放される必要はありません。
 
Tobj::FactoryFinder::find_one_factory
概要
単一のファクトリ・オブジェクトへのリファレンスを取得します。
C++マッピング
virtual CosLifeCycle::Factory_ptr
find_one_factory( const CosNaming::Name& factory_key) = 0;
Javaマッピング
public org.omg.CORBA.Object
find_one_factory( org.omg.CosNaming.NameComponent[] factory_key)
throws
org.omg.CosLifeCycle.NoFactory,
com.beasys.Tobj.CannotProceed,
com.beasys.Tobj.RegistrarNotAvailable;
パラメータ
factory_key
このパラメータは、ファクトリ・オブジェクト参照を一意に識別する、NameComponents(<id, kind>ペアのタプル)の無制限のシーケンスです。
NameComponentは、どちらも文字列型であるidkindという2つのメンバーを持つものとして定義されます。idフィールドは、ファクトリ・オブジェクトのIDを表すのに使用されます。kindフィールドは、idフィールドの値をどのように解釈するかを示すのに使用されます。
操作TP::register_factoryを使用して登録されたファクトリ・オブジェクトへの参照のkind値は、"FactoryInterface"となります。
例外
CORBA::BAD_PARAM
入力パラメータの値が不適切な値を持っているか、無効であることを示します。特に重要なことは、パラメータfactory_keyに値が指定されていないか、NULL値が指定された場合にこの例外が発生するという点です。
CosLifeCycle::NoFactory
factory_keyパラメータの情報に一致するファクトリが登録されていないことを示します。
Tobj::CannotProceed
FactoryFinderまたはNameManagerが、ファクトリ・オブジェクトのリファレンスを見つけようとしているときに内部エラーに遭遇したことを示します。
エラー情報は、ユーザー・ログに書き込まれます。
Tobj::RegistrarNotAvailable
FactoryFinderがNameManagerと通信できなかったことを示します。
エラー情報は、ユーザー・ログに書き込まれます。
説明
アプリケーションによりfind_one_factoryメソッドが呼び出され、メソッドへの入力として指定されたキーの値と一致するキーを持つ1つのファクトリ・オブジェクトへの参照が取得されます。指定されたキーで複数のファクトリ・オブジェクトが登録されている場合、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++マッピング
virtual CosLifeCycle::Factory_ptr
find_one_factory_by_id( const char * factory_id) = 0;
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パラメータの情報に一致するファクトリが登録されていないことを示します。
Tobj::CannotProceed
FactoryFinderまたはNameManagerが、ファクトリ・オブジェクトのリファレンスを見つけようとしているときに内部エラーに遭遇したことを示します。
エラー情報は、ユーザー・ログに書き込まれます。
Tobj::RegistrarNotAvailable
FactoryFinderがNameManagerと通信できなかったことを示します。
エラー情報は、ユーザー・ログに書き込まれます。
説明
アプリケーションによりfind_one_factory_by_idメソッドが呼び出され、メソッドへの入力として指定されたIDの値と一致する登録IDを持つ1つのファクトリ・オブジェクトへの参照が取得されます。指定されたIDで複数のファクトリ・オブジェクトが登録されている場合、FactoryFinderのロード・バランシング・スキームに基づき、FactoryFinderはファクトリ・オブジェクトを1つ選択します。その結果、同じIDでfind_one_factory_by_id操作を複数回呼び出すと、様々なオブジェクト参照が返ることがあります。
find_one_factory_by_idメソッドは、factory_idパラメータと同じ値を含むidフィールドおよび値"FactoryInterface"を含むkindフィールドを持つ1つのNameComponentが含まれるキーを渡されたfind_one_factory操作と同様に動作します。
ファクトリの登録済識別子がfactory_idパラメータの値と等価であるとみなされるのは、1つのNameComponentを含むCosLifeCycle::Key構造体を構成した結果に、idフィールドの値としてfactory_idパラメータが含まれ、kindフィールドの値として値"FactoryInterface"が含まれる場合です。値は、大文字と小文字、場所など、すべての面で一致している必要があります。
戻り値
ファクトリ・オブジェクトのオブジェクト参照。C++では、このメソッドはCosLifeCycle::Factory型のオブジェクト参照を返します。Javaでは、メソッドはorg.omg.CORBA.Object型のオブジェクト参照を返します。
操作が例外を生成した場合には、戻り値は無効であり、呼出し側によって解放される必要はありません。
Tobj::FactoryFinder::find_factories_by_id
概要
1つまたは複数のファクトリ・オブジェクト参照のシーケンスを取得します。
C++マッピング
virtual CosLifeCycle::Factories *
find_factories_by_id( const char * factory_id) = 0;
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パラメータの情報に一致するファクトリが登録されていないことを示します。
Tobj::CannotProceed
FactoryFinderまたはNameManagerが、ファクトリ・オブジェクトのリファレンスを見つけようとしているときに内部エラーに遭遇したことを示します。
エラー情報は、ユーザー・ログに書き込まれます。
Tobj::RegistrarNotAvailable
FactoryFinderがNameManagerと通信できなかったことを示します。
エラー情報は、ユーザー・ログに書き込まれます。
説明
アプリケーションによりfind_factories_by_idメソッドが呼び出され、1つ以上のファクトリ・オブジェクト参照のシーケンスが取得されます。メソッドには、探しているファクトリの識別子が含まれた、NULLで終了する文字列が渡されます。指定したIDで登録されたファクトリ・オブジェクトが複数存在した場合、FactoryFinderは一致する登録済オブジェクトのオブジェクト参照のリストを返します。
find_factories_by_idメソッドは、factory_idパラメータと同じ値を含むidフィールドおよび値"FactoryInterface"を含むkindフィールドを持つ1つのNameComponentが含まれるキーを渡されたfind_factory操作と同様に動作します。
ファクトリの登録済識別子がfactory_idパラメータの値と等価であるとみなされるのは、1つのNameComponentを含むCosLifeCycle::Key構造体を構成した結果に、idフィールドの値としてfactory_idパラメータが含まれ、kindフィールドの値として値"FactoryInterface"が含まれる場合です。値は、大文字と小文字、場所など、すべての面で一致している必要があります。
戻り値
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;
例外
Tobj::CannotProceed
FactoryFinderまたはNameManagerが、ファクトリ・オブジェクトのリファレンスを見つけようとしているときに内部エラーに遭遇したことを示します。
エラー情報は、ユーザー・ログに書き込まれます。
Tobj::RegistrarNotAvailable
FactoryFinderがNameManagerと通信できなかったことを示します。
エラー情報は、ユーザー・ログに書き込まれます。
説明
アプリケーションによりlist_factoriesメソッドが呼び出され、FactoryFinderに現在登録されているファクトリ・オブジェクトのリストが取得されます。メソッドは、ファクトリの登録に使用されるキーと、ファクトリ・オブジェクトへのリファレンスの両方を返します。
list_factoriesによって返されるファクトリの数は、ユーザーが登録したものより1つ多くなります。たとえば、ユーザーが4つのファクトリを登録している場合、list_factoriesで返されるファクトリ数は5になります。
注意:
戻り値
Tobj::FactoryComponentの無制限シーケンス。シーケンス中のTobj::FactoryComponentの各オカレンスには、登録されたファクトリ・オブジェクトへのリファレンス、およびそのファクトリ・オブジェクトの登録に使用されたCosLifeCycle::Keyが含まれます。
操作が例外を生成した場合には、戻り値は無効であり、呼出し側によって解放される必要はありません。
オートメーションのメソッド
ここでは、DITobj_FactoryFinderオートメーション・メソッドについて説明します。
DITobj_FactoryFinder.find_one_factory
概要
アプリケーション・ファクトリを1つ取得します。
MIDLマッピング
HRESULT find_one_factory(
[in] VARIANT factory_key,
[in,out,optional] VARIANT* exceptionInfo,
[out,retval] IDispatch** returnValue);
オートメーション・マッピング
Function find_one_factory(factory_key, [exceptionInfo]) As Object
パラメータ
factory_key
このパラメータは、ファクトリ・オブジェクト参照を一意に識別するDICosNaming_NameComponent(<id, kind>値のペア)のセーフ配列を含みます。
exceptionInfo
エラーが発生した場合にアプリケーションが追加の例外データを取得できるようにするオプションの入力引数。
例外
NoFactory
この例外は、入力されたfactory_keyに対応するアプリケーション・ファクトリ・オブジェクト参照をFactoryFinderが見つけることができない場合に発生します。
CannotProceed
この例外は、FactoryFinderまたはCORBAサービス・ネーミング・サービスが検索中に内部エラーに遭遇した場合に発生し、ユーザー・ログ(ULOG)にエラーが書き込まれます。この例外が発生した場合は、すぐに作業担当者に通知してください。内部エラーの重大度によっては、FactoryFinderまたはCORBAサービス・ネーミング・サービスが実行されていたサーバーが、終了していることがあります。FactoryFinderサービスが終了した場合は、新しいFactoryFinderサービスを開始します。CORBAサービス・ネーミング・サービスの1つが終了しており、別のCORBAサービス・ネーミング・サービスが実行中である場合は、新規のCORBAサービス・ネーミング・サービスを開始します。稼働中のネーミング・サービス・サーバーがない場合は、アプリケーションを再起動します。
RegistrarNotAvailable
この例外は、FactoryFinderオブジェクトがCORBAサービス・ネーミング・サービス・オブジェクトを見つけることができない場合に発生します。この例外が発生した場合は、すぐに作業担当者に通知してください。稼働中のネーミング・サービス・サーバーがない場合は、アプリケーションを再起動します。
説明
このメンバー関数は、入力されたfactory_keyとキーが一致する1つのアプリケーション・ファクトリ・オブジェクト参照を返すようFactoryFinderに指示します。これを実現するには、メンバー関数が等価性の照合を行う必要があります。つまり、入力factory_keyのすべてのNameComponent <id, kind>ペアが、アプリケーション・ファクトリのキーの各<id, kind>ペアと完全に一致していなければなりません。入力されたfactory_keyを含むファクトリ・キーが複数存在する場合、FactoryFinderは内部で定義されたロード・バランシング・スキームに基づき、1つのファクトリ・キーを選択します。同じidfind_one_factoryを複数回呼び出すと、様々なオブジェクト参照が返ることがあります。
戻り値
アプリケーション・ファクトリのインタフェース・ポインタへのリファレンスを返します。
DITobj_FactoryFinder.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
このパラメータは、アプリケーション・ファクトリの種類またはタイプを識別するために使用される文字列識別子を表します。この文字列の構成に関する提案については、『CORBAサーバー・アプリケーションの作成』を参照してください。
exceptionInfo
エラーが発生した場合にアプリケーションが追加の例外データを取得できるようにするオプションの入力引数。
例外
NoFactory
この例外は、入力されたfactory_idに対応するアプリケーション・ファクトリ・オブジェクト参照をFactoryFinderが見つけることができない場合に発生します。
CannotProceed
この例外は、FactoryFinderまたはCORBAサービス・ネーミング・サービスが検索中に内部エラーに遭遇した場合に発生し、ユーザー・ログ(ULOG)にエラーが書き込まれます。この例外が発生した場合は、すぐに作業担当者に通知してください。内部エラーの重大度によっては、FactoryFinderまたはCORBAサービス・ネーミング・サービスが実行されていたサーバーが、終了していることがあります。FactoryFinderサービスが終了した場合は、新しいFactoryFinderサービスを開始します。CORBAサービス・ネーミング・サービスの1つが終了しており、別のCORBAサービス・ネーミング・サービスが実行中である場合は、新規のCORBAサービス・ネーミング・サービスを開始します。稼動中のネーミング・サービスがない場合は、アプリケーションを再起動します。
RegistrarNotAvailable
この例外は、FactoryFinderオブジェクトがCORBAサービス・ネーミング・サービス・オブジェクトを見つけることができない場合に発生します。この例外が発生した場合は、すぐに作業担当者に通知してください。稼働中のネーミング・サービス・サーバーがない場合は、アプリケーションを再起動します。
説明
このメンバー関数は、メソッドの入力factory_idとキーのidが一致する1つのアプリケーション・ファクトリ・オブジェクト参照を返すようFactoryFinderに指示します。これを実現するには、メンバー関数が等価性の照合を行う必要があります(つまり、入力されたfactory_idが、アプリケーション・ファクトリのキーの<id,kind>ペアのidと完全に一致している必要があります。入力されたfactory_idを含むファクトリ・キーが複数存在する場合、FactoryFinderは内部で定義されたロード・バランシング・スキームに基づいて1つのファクトリ・キーを選択します。同じidfind_one_factory_by_idを複数回呼び出すと、様々なオブジェクト参照が戻されることがあります。
戻り値
アプリケーション・ファクトリのインタフェース・ポインタへのリファレンスを返します。
DITobj_FactoryFinder.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
このパラメータは、アプリケーション・ファクトリの種類またはタイプを識別するために使用される文字列識別子を表します。オンライン・マニュアルの『CORBAクライアント・アプリケーションの作成』では、この文字列の構成に関する提案をいくつか紹介しています。
exceptionInfo
エラーが発生した場合にアプリケーションが追加の例外データを取得できるようにするオプションの入力引数。
例外
NoFactory
この例外は、入力されたfactory_keyまたはfactory_idに対応するアプリケーション・ファクトリ・オブジェクト参照をFactoryFinderが見つけることができない場合に発生します。
CannotProceed
この例外は、FactoryFinderまたはCORBAサービス・ネーミング・サービスが検索中に内部エラーに遭遇した場合に発生し、ユーザー・ログ(ULOG)にエラーが書き込まれます。この例外が発生した場合は、すぐに作業担当者に通知してください。内部エラーの重大度によっては、FactoryFinderまたはCORBAサービス・ネーミング・サービスが実行されていたサーバーが、終了していることがあります。FactoryFinderサービスが終了した場合は、新しいFactoryFinderサービスを開始します。CORBAサービス・ネーミング・サービスの1つが終了しており、別のCORBAサービス・ネーミング・サービスが実行中である場合は、新規のCORBAサービス・ネーミング・サービスを開始します。稼働中のネーミング・サービス・サーバーがない場合は、アプリケーションを再起動します。
RegistrarNotAvailable
この例外は、FactoryFinderオブジェクトがCORBAサービス・ネーミング・サービス・オブジェクトを見つけることができない場合に発生します。この例外が発生した場合は、すぐに作業担当者に通知してください。稼働中のネーミング・サービス・サーバーがない場合は、アプリケーションを再起動します。
説明
このメンバー関数は、メソッドの入力factory_idとキーのidが一致するアプリケーション・ファクトリ・オブジェクト参照のリストを返すようFactoryFinderに指示します。これを実現するには、メンバー関数が等価性の照合を行う必要があります(つまり、入力factory_idが、アプリケーション・ファクトリのキーの<id,kind>ペアの各idと完全に一致している必要があります)。
戻り値
アプリケーション・ファクトリへのインタフェース・ポインタの配列を含むバリアントを返します。
DITobj_FactoryFinder.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に指示します。Oracle Tuxedoシステムでは、等価性の照合が行われることを想定しています。つまり、<id,kind>ペアの2つのシーケンス(入力キーに対応するものと、アプリケーション・ファクトリのキーに含まれるもの)のそれぞれが同じ長さであり、一方のシーケンスにあるペアはすべて、もう一方のペアにも同一のものが存在します。
戻り値
アプリケーション・ファクトリへのインタフェース・ポインタの配列を含むバリアントを返します。
DITobj_FactoryFinder.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によって1997年12月に発行されたCORBAサービス仕様の第6章「Life Cycle Service」で定義されているように、FactoryFinderオブジェクトはすべてCosLifeCycle::FactoryFinderインタフェースをサポートしています。このインタフェースは、指定した基準に合致するファクトリ・オブジェクトへの1つまたは複数のリファレンスを取得するために使用される操作を1つ含みます。
ファクトリ・オブジェクトへのリファレンスの登録
次のコードの抜粋(リスト5-8)に、TPフレームワーク・インタフェースを使用してファクトリ・オブジェクトへの参照をFactoryFinderに登録する方法を示します。
リスト5-8 サーバー・アプリケーション: ファクトリの登録
// Server Application: Registering a factory.
// C++ Example.
TP::register_factory( factory_obj.in( ), “TellerFactory" );
 
CosLifeCycle::FactoryFinderインタフェースを使用したFactoryFinderオブジェクトへのリファレンスの取得
次のコードの抜粋(リスト5-9)に、CORBA準拠のインタフェースを使用してファクトリ・オブジェクトへの1つ以上の参照を取得する方法を示します。
リスト5-9 クライアント・アプリケーション: FactoryFinderオブジェクト参照の取得
// Client Application: Obtaining the object reference
// to factory objects.
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)に、Oracle Tuxedo拡張のBootstrapオブジェクトを使用してFactoryFinderオブジェクトへの参照を取得する方法を示します。
リスト5-10 クライアント・アプリケーション: Tobjの手法を使用した1つのファクトリの検索
// Client Application: Finding one factory using the Tobj
// approach.
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インタフェースのOracle Tuxedo CORBA拡張を使用できますが、Tobj_Bootstrapオブジェクトはファクトリを検索するために必須のものではありません。CORBA INSを使用していれば、CosLifeCycle::FactoryFinderインタフェースにより提供されるfind_factories()メソッドを使用できます。
FactoryFinderオブジェクトに対する拡張の使用
Oracle TuxedoはFactoryFinderオブジェクトを拡張し、機能性についてはCORBAで定義された操作で提供されるものと同様の機能をサポートしますが、大幅に単純で、より限定的なシグネチャを使用します。拡張機能は、Tobj::FactoryFinderインタフェースを定義することによって提供されます。Tobj::FactoryFinderインタフェース用に定義された操作は、CORBAで定義される同等の機能を、焦点を絞って簡素化した形態で提供することを意図しています。アプリケーション開発者は、開発時に、CORBA定義の拡張を使用するか、Oracle Tuxedoの拡張を使用するかを選択できます。インタフェースTobj::FactoryFinderは、CosLifeCycle::FactoryFinderインタフェースから派生しています。
FactoryFinderオブジェクトへのOracle Tuxedoの拡張は、Object Management GroupのCORBAサービス仕様(1997年12月)の第6章「Life Cycle Service」で定義されているFactoryFinderオブジェクトとすべて同じ規則に準拠しています。
拡張されたFactoryFinderオブジェクトの実装では、ユーザーがCORBA定義のCosLifeCycle::FactoryFinderインタフェースの場合と同様にCosLifeCycle::Keyを指定するか、または検索するファクトリ・オブジェクトの識別子を含むNULLで終了する文字列を指定する必要があります。
Tobj::FactoryFinderを使用しての、1つのファクトリの取得
次のコードの抜粋(リスト5-11)に、Oracle Tuxedo拡張のインタフェースを使用して、識別子に基づいてファクトリ・オブジェクトへの1つの参照を取得する方法を示します。
リスト5-11 クライアント・アプリケーション: Oracle Tuxedo拡張の手法を使用したファクトリの検索
CosLifeCycle::Factory_ptrvar fp_obj = ff_np ->
find_one_factory_by_id( “TellerFactory” );
 
Tobj::FactoryFinderを使用しての、1つまたは複数のファクトリの取得
次のコードの抜粋(リスト5-12)に、Oracle Tuxedo拡張を使用して、識別子に基づいてファクトリ・オブジェクトへの1つ以上の参照を取得する方法を示します。
リスト5-12 クライアント・アプリケーション: Oracle Tuxedo拡張の手法を使用した1つ以上のファクトリの検索
CosLifeCycle::Factories * _var flp = ff_np ->
find_factories_by_id( “TellerFactory” );
 
 

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