CORBAプログラミング・リファレンス

     前  次    新規ウィンドウで目次を開く  新規ウィンドウで索引を開く  PDFとして表示 - 新規ウィンドウ  Adobe Readerを取得 - 新規ウィンドウ
コンテンツはここから始まります

FactoryFinderインタフェース

FactoryFinderインタフェースは、Oracle Tuxedoドメインへの唯一のエントリ・ポイントとして作用する1つのオブジェクト参照をクライアントに提供します。Oracle Tuxedo NameManagerにより、FactoryFinderのオブジェクト参照に対するファクトリ名のマッピングが提供されます。複数のFactoryFinderとNameManagerが一緒になると、可用性と信頼性が向上します。このリリースでは、機能性のレベルを拡張して、複数ドメインをサポートしています。

注意: NameManagerはCORBAサービス・ネーミング・サービスのようなネーミング・サービスではなく、登録されたファクトリを格納するための単なる手段です。

Oracle Tuxedo環境では、アプリケーション・ファクトリ・オブジェクトを使用して、クライアントがビジネス・オペレーション(TellerFactory、Tellerなど)の実行のためにやり取りするオブジェクトを作成します。一般に、アプリケーション・ファクトリはサーバーの初期化中に作成され、リモート・クライアントと、サーバー・アプリケーション内に置かれたクライアントの双方からアクセスされます。

FactoryFinderインタフェースとNameManagerサービスは、アプリケーション・サーバーではない個別のサーバーに格納されています。クライアントとサーバーの両アプリケーションがファクトリ情報にアクセスしてこれを更新できるように、アプリケーション・プログラミング・インタフェース(API)のセットが提供されています。

このリリースで複数ドメインをサポートしたことにより、多数のマシンを使用するようスケーリングしたり、アプリケーション環境を分割したりする必要のある顧客にとっての利便性が向上しています。複数ドメインをサポートするために、Oracle Tuxedo環境内でファクトリを見つけるためのメカニズムが拡張され、あるドメインのファクトリを別のドメインでも認識できるようになっています。別のドメインのファクトリの可視性は、システム管理者によって制御されます。

 


機能、制限事項、および要件

アプリケーション・ファクトリは、サーバー・アプリケーションの初期化中にNameManagerで登録する必要があります。それにより、クライアントに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へのリファレンスは、そのFactoryFinderと同じマシンに登録されたファクトリ・オブジェクトへのリファレンス、別のマシンに登録されたファクトリ・オブジェクトへのリファレンス、または別のドメインに登録されたファクトリ・オブジェクトへのリファレンスである可能性があります。

ファクトリの登録

クライアント・アプリケーションがファクトリへのリファレンスを取得できるようになるには、アプリケーション・サーバーが、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 ファクトリ登録のための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 ファクトリ・オブジェクトのロケート

ファクトリ・オブジェクトのロケート

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の拡張を使用できますが、このオブジェクトはファクトリを見つけるために必須のものではありません。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では、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;
};
// This information is taken from CORBAservices: Common Object 
// Services Specification
, page 3-6. Revised Edition:
// March 31, 1995. Updated: November 1997. Used with permission by 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);
        };
};
// This information is taken from CORBAservices: Common Object 
// Services Specification
, pages 6-10, 11. Revised Edition:
// March 31, 1995. Updated: November 1997. Used with permission by 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に別ドメイン内のファクトリの情報が含まれている場合に実現可能です(図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 (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つの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は、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型のオブジェクト参照の無制限配列を返します。

オペレーションが例外を生成した場合には、戻り値は無効であり、呼出し側によって解放される必要はありません。

 


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は、idおよびkindの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メソッドが呼び出され、メソッドへの入力として指定されたキーの値と一致するキーを備えた唯一のファクトリ・オブジェクトへのリファレンスが取得されます。指定されたキーで複数のファクトリ・オブジェクトが登録されている場合、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を備えた唯一のファクトリ・オブジェクトへのリファレンスが取得されます。指定された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フィールドの値として“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フィールドを備えた単一のNameComponentが含まれるキーを渡された、find_factoryオペレーションと同じように振る舞います。

ファクトリの登録された識別子がfactory_idパラメータの値と等価であると見なされるのは、単一の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によって返されるファクトリの数は、ユーザーが登録したファクトリの数と同じです。たとえば、ユーザーが4つのファクトリを登録している場合、list_factoriesで返されるファクトリ数は5になります。

注意: 原因は、OMGトランザクション・サービス仕様バージョン1.1のセクション2.1.2で、トランザクション・ファクトリの検索がライフ・サイクル・サービスのFactoryFinderインタフェースを使用して行われるように規定されているからです。したがって、トランザクション・ファクトリはFactoryFinderを使用して製品によって内部で登録されます。

戻り値

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のCORBAサービス仕様(1997年12月)の第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の拡張を使用できますが、このオブジェクトはファクトリを見つけるために必須のものではありません。CORBA INSを使用していれば、CosLifeCycle::FactoryFinderインタフェースにより提供されるfind_factories()メソッドを使用できます。

FactoryFinderオブジェクトに対する拡張の使用

Oracle Tuxedoでは、CORBAで定義されるオペレーションと類似の機能をサポートするように、FactoryFinderオブジェクトを拡張します。ただしこちらでは、大幅に簡素化されており、より限定的であるシグネチャが使われます。拡張機能は、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拡張の手法を使用して、1つのファクトリを見つける
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” );

  先頭に戻る       前  次