•
|
値"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」という項を参照してください。
|
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つのメソッド宣言が含まれています。このファイルは、これらのメソッドを使用するすべてのサーバー・アプリケーションに含める必要があります。
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フィールドの値を自身で指定します。
リスト5-2に、
ns.idlファイルの、FactoryFinderに関連した部分を示します。
// This information is taken from CORBAservices: Common Object
// Services Specification, page 3-6.Revised Edition:
// March 31, 1995.更新: 1997年11月。また、この情報は、OMGの権限を得て転載しています。
リスト5-3に、
lcs.idlファイルの、FactoryFinderに関連した部分を示します。
// This information is taken from CORBAservices: Common Object
// Services Specification, pages 6-10, 11.Revised Edition:
// March 31, 1995.更新: 1997年11月。また、この情報は、OMGの権限を得て転載しています。
リスト5-4に、TobjモジュールのOMG IDLを示します。
CosNamingの仕様には、CosLifeCycle::Keysの作成と操作に使用可能な名前ライブラリ・インタフェースを構成する2つのインタフェースが説明されています。これらのインタフェースの擬似OMG IDL文については、次のセクションで説明します。
注意:
|
この情報は、『CORBAservices: Common Object Services Specification』の3-14から18のページから引用したものです。改訂版: 1995年3月31日更新: 1997年11月。また、この情報は、OMGの権限を得て転載しています。
|
擬似オブジェクト参照をOMG IDLインタフェース間で渡すことはできません。『CORBAservices: Common Object Services Specification』の第3章の「The CosNaming Module」という項に記載されているように、CORBAサービス・ネーミング・サービスは、NamingContext OMG IDLインタフェースをサポートしています。名前ライブラリは、NamingContextインタフェースを通じてライブラリ名をネーム・サービスに渡せる値に変換する操作をサポートしています。
名前ライブラリは、リスト5-5に示すように、LNameComponentインタフェースとLNameインタフェースという2つの擬似IDLインタフェースで構成されています。
名前コンポーネントは、identifierと
kindという2つの属性で構成されています。LNameComponentインタフェースは、次のように、これらの属性と関連付けられた操作を定義します。
get_id操作は、
identifier属性の値を返します。属性が設定されていなければ、
NotSet例外が発生します。
set_id操作は、
identifier属性を文字列引数に設定します。
get_kind操作は、
kind属性の値を返します。属性が設定されていなければ、
NotSet例外が発生します。
set_kind操作は、
kind属性を文字列引数に設定します。
destroy操作は、ライブラリ名コンポーネント擬似オブジェクトを破棄します。
コンポーネントi-1が未定義で、コンポーネント
iが1より大きい場合、
insert_component操作は
NoComponent例外を生成します。
get_component操作は、
i番目のコンポーネントを返します。最初のコンポーネントの番号を「1」とします。
delete_component操作は、
i番目のコンポーネントを削除して返します。
delete_component操作が実行されると、複合名のコンポーネントが1つ減り、それまで
i+1...nとして識別されていたコンポーネントが
i...n-1として識別されるようになります。
num_components操作は、ライブラリ名に含まれるコンポーネントの数を返します。
less_than操作は、ライブラリ名
lnに関してライブラリ名の順序をテストします。
destroy操作は、ライブラリ名擬似オブジェクトを破棄します。
ライブラリ名クラスの詳細は、『CORBAservices: Common Object Services Specification』の第3章を参照してください。
注意:
|
LNameのless_thanメンバー関数を除き、FactoryFinderメンバー関数はすべて、C++とJavaの両方で実装されます。
|
NameComponentは、どちらも文字列型であるidと
kindという2つのメンバーを持つものとして定義されます。
idフィールドは、ファクトリ・オブジェクトのIDを表すのに使用されます。
kindフィールドは、
idフィールドの値をどのように解釈するかを示すのに使用されます。
操作TP::register_factoryを使用して登録されたファクトリ・オブジェクトへの参照のkind値は、
"FactoryInterface"となります。
factory_keyパラメータの情報に一致するファクトリが登録されていないことを示します。
find_factoriesメソッドは、ファクトリ・オブジェクト参照のシーケンスを取得するためにアプリケーションによって呼び出されます。操作には、必要なファクトリを識別するキーが渡されます。このキーは、CORBAサービス・ネーミング・サービスで定義した名前です。キーに一致するファクトリは複数存在することがあります。そのような場合、FactoryFinderはファクトリのシーケンスを返します。
factory_keyパラメータの値として指定された情報と一致するファクトリ・オブジェクトへの参照の無制限シーケンス。C++では、メソッドは
CosLifeCycle::Factory型のオブジェクト参照のシーケンスを返します。Javaでは、メソッドは
org.omg.CORBA.Object型のオブジェクト参照の無制限配列を返します。
NameComponentは、どちらも文字列型であるidと
kindという2つのメンバーを持つものとして定義されます。
idフィールドは、ファクトリ・オブジェクトのIDを表すのに使用されます。
kindフィールドは、
idフィールドの値をどのように解釈するかを示すのに使用されます。
操作TP::register_factoryを使用して登録されたファクトリ・オブジェクトへの参照のkind値は、
"FactoryInterface"となります。
factory_keyパラメータの情報に一致するファクトリが登録されていないことを示します。
アプリケーションによりfind_one_factoryメソッドが呼び出され、メソッドへの入力として指定されたキーの値と一致するキーを持つ1つのファクトリ・オブジェクトへの参照が取得されます。指定されたキーで複数のファクトリ・オブジェクトが登録されている場合、FactoryFinderのロード・バランシング・スキームに基づき、FactoryFinderはファクトリ・オブジェクトを1つ選択します。その結果、同じキーで
find_one_factoryメソッドを複数回呼び出すと、様々なオブジェクト参照が返ることがあります。
factory_idパラメータの値は、ファクトリ・オブジェクトの登録済参照と比較するときに値が
"FactoryInterface"となっている
kindフィールドを持つNameComponentの
idフィールドの値として使用されます。
factory_keyパラメータの情報に一致するファクトリが登録されていないことを示します。
アプリケーションにより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"が含まれる場合です。値は、大文字と小文字、場所など、すべての面で一致している必要があります。
factory_idパラメータの値は、ファクトリ・オブジェクトの登録済参照と比較するときに値が
"FactoryInterface"となっている
kindフィールドを持つNameComponentの
idフィールドの値として使用されます。
factory_keyパラメータの情報に一致するファクトリが登録されていないことを示します。
アプリケーションにより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型のオブジェクト参照の無制限配列を返します。
アプリケーションによりlist_factoriesメソッドが呼び出され、FactoryFinderに現在登録されているファクトリ・オブジェクトのリストが取得されます。メソッドは、ファクトリの登録に使用されるキーと、ファクトリ・オブジェクトへのリファレンスの両方を返します。
list_factoriesによって返されるファクトリの数は、ユーザーが登録したものより1つ多くなります。たとえば、ユーザーが4つのファクトリを登録している場合、
list_factoriesで返されるファクトリ数は5になります。
Tobj::FactoryComponentの無制限シーケンス。シーケンス中の
Tobj::FactoryComponentの各オカレンスには、登録されたファクトリ・オブジェクトへのリファレンス、およびそのファクトリ・オブジェクトの登録に使用された
CosLifeCycle::Keyが含まれます。
DITobj_FactoryFinder.find_one_factory
この例外は、入力されたfactory_keyに対応するアプリケーション・ファクトリ・オブジェクト参照をFactoryFinderが見つけることができない場合に発生します。
この例外は、FactoryFinderまたはCORBAサービス・ネーミング・サービスが検索中に内部エラーに遭遇した場合に発生し、ユーザー・ログ(ULOG)にエラーが書き込まれます。この例外が発生した場合は、すぐに作業担当者に通知してください。内部エラーの重大度によっては、FactoryFinderまたはCORBAサービス・ネーミング・サービスが実行されていたサーバーが、終了していることがあります。FactoryFinderサービスが終了した場合は、新しいFactoryFinderサービスを開始します。CORBAサービス・ネーミング・サービスの1つが終了しており、別のCORBAサービス・ネーミング・サービスが実行中である場合は、新規のCORBAサービス・ネーミング・サービスを開始します。稼働中のネーミング・サービス・サーバーがない場合は、アプリケーションを再起動します。
このメンバー関数は、入力されたfactory_keyとキーが一致する1つのアプリケーション・ファクトリ・オブジェクト参照を返すようFactoryFinderに指示します。これを実現するには、メンバー関数が等価性の照合を行う必要があります。つまり、入力
factory_keyのすべてのNameComponent <id, kind>ペアが、アプリケーション・ファクトリのキーの各<id, kind>ペアと完全に一致していなければなりません。入力された
factory_keyを含むファクトリ・キーが複数存在する場合、FactoryFinderは内部で定義されたロード・バランシング・スキームに基づき、1つのファクトリ・キーを選択します。同じ
idで
find_one_factoryを複数回呼び出すと、様々なオブジェクト参照が返ることがあります。
DITobj_FactoryFinder.find_one_factory_by_id
この例外は、入力されたfactory_idに対応するアプリケーション・ファクトリ・オブジェクト参照をFactoryFinderが見つけることができない場合に発生します。
この例外は、FactoryFinderまたはCORBAサービス・ネーミング・サービスが検索中に内部エラーに遭遇した場合に発生し、ユーザー・ログ(ULOG)にエラーが書き込まれます。この例外が発生した場合は、すぐに作業担当者に通知してください。内部エラーの重大度によっては、FactoryFinderまたはCORBAサービス・ネーミング・サービスが実行されていたサーバーが、終了していることがあります。FactoryFinderサービスが終了した場合は、新しいFactoryFinderサービスを開始します。CORBAサービス・ネーミング・サービスの1つが終了しており、別のCORBAサービス・ネーミング・サービスが実行中である場合は、新規のCORBAサービス・ネーミング・サービスを開始します。稼動中のネーミング・サービスがない場合は、アプリケーションを再起動します。
このメンバー関数は、メソッドの入力factory_idとキーの
idが一致する1つのアプリケーション・ファクトリ・オブジェクト参照を返すようFactoryFinderに指示します。これを実現するには、メンバー関数が等価性の照合を行う必要があります(つまり、入力された
factory_idが、アプリケーション・ファクトリのキーの<id,kind>ペアの
idと完全に一致している必要があります。入力された
factory_idを含むファクトリ・キーが複数存在する場合、FactoryFinderは内部で定義されたロード・バランシング・スキームに基づいて1つのファクトリ・キーを選択します。同じ
idで
find_one_factory_by_idを複数回呼び出すと、様々なオブジェクト参照が戻されることがあります。
DITobj_FactoryFinder.find_factories_by_id
この例外は、入力されたfactory_keyまたは
factory_idに対応するアプリケーション・ファクトリ・オブジェクト参照をFactoryFinderが見つけることができない場合に発生します。
この例外は、FactoryFinderまたはCORBAサービス・ネーミング・サービスが検索中に内部エラーに遭遇した場合に発生し、ユーザー・ログ(ULOG)にエラーが書き込まれます。この例外が発生した場合は、すぐに作業担当者に通知してください。内部エラーの重大度によっては、FactoryFinderまたはCORBAサービス・ネーミング・サービスが実行されていたサーバーが、終了していることがあります。FactoryFinderサービスが終了した場合は、新しいFactoryFinderサービスを開始します。CORBAサービス・ネーミング・サービスの1つが終了しており、別のCORBAサービス・ネーミング・サービスが実行中である場合は、新規のCORBAサービス・ネーミング・サービスを開始します。稼働中のネーミング・サービス・サーバーがない場合は、アプリケーションを再起動します。
このメンバー関数は、メソッドの入力factory_idとキーの
idが一致するアプリケーション・ファクトリ・オブジェクト参照のリストを返すようFactoryFinderに指示します。これを実現するには、メンバー関数が等価性の照合を行う必要があります(つまり、入力
factory_idが、アプリケーション・ファクトリのキーの<id,kind>ペアの各
idと完全に一致している必要があります)。
DITobj_FactoryFinder.find_factories
この例外は、入力されたfactory_keyに対応するアプリケーション・ファクトリ・オブジェクト参照をFactoryFinderが見つけることができない場合に発生します。
find_factoriesメソッドは、キーがメソッドの入力キーと一致するサーバー・アプリケーション・ファクトリ・オブジェクト参照のリストを返すようFactoryFinderに指示します。Oracle Tuxedoシステムでは、等価性の照合が行われることを想定しています。つまり、<id,kind>ペアの2つのシーケンス(入力キーに対応するものと、アプリケーション・ファクトリのキーに含まれるもの)のそれぞれが同じ長さであり、一方のシーケンスにあるペアはすべて、もう一方のペアにも同一のものが存在します。
DITobj_FactoryFinder.list_factories
この例外は、FactoryFinderまたはCORBAサービス・ネーミング・サービスが検索中に内部エラーに遭遇した場合に発生し、ユーザー・ログ(ULOG)にエラーが書き込まれます。この例外が発生した場合は、すぐに作業担当者に通知してください。内部エラーの重大度によっては、FactoryFinderまたはCORBAサービス・ネーミング・サービスが実行されていたサーバーが、終了していることがあります。FactoryFinderサービスが終了した場合は、新しいFactoryFinderサービスを開始します。CORBAサービス・ネーミング・サービスの1つが終了しており、別のCORBAサービス・ネーミング・サービスが実行中である場合は、新規のCORBAサービス・ネーミング・サービスを開始します。稼動中のネーミング・サービス・サーバーがない場合は、アプリケーションを再起動します。
次のコードの抜粋(リスト5-8)に、TPフレームワーク・インタフェースを使用してファクトリ・オブジェクトへの参照をFactoryFinderに登録する方法を示します。
次のコードの抜粋(リスト5-10)に、Oracle Tuxedo拡張のBootstrapオブジェクトを使用してFactoryFinderオブジェクトへの参照を取得する方法を示します。
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()メソッドを使用できます。
|
次のコードの抜粋(リスト5-11)に、Oracle Tuxedo拡張のインタフェースを使用して、識別子に基づいてファクトリ・オブジェクトへの1つの参照を取得する方法を示します。
次のコードの抜粋(リスト5-12)に、Oracle Tuxedo拡張を使用して、識別子に基づいてファクトリ・オブジェクトへの1つ以上の参照を取得する方法を示します。
CosLifeCycle::Factories * _var flp = ff_np ->
find_factories_by_id( “TellerFactory” );