注意:
|
Oracle Tuxedo CORBA JavaクライアントとOracle Tuxedo CORBA JavaクライアントORBはTuxedo 8.1で非推奨になり、サポートされなくなりました。すべてのOracle Tuxedo CORBA JavaクライアントおよびOracle Tuxedo CORBA JavaクライアントORBのテキスト・リファレンスとコード・サンプルは、サード・パーティのJava ORBライブラリを実装または実行する際の参考や、プログラマの参照用としてのみ使用してください。
|
サード・パーティのCORBA Java ORBのテクニカル・サポートは、各ベンダーによって提供されます。Oracle Tuxedoでは、サード・パーティのCORBA Java ORBに関する技術的なサポートまたはドキュメントは提供していません。
CORBAネーム・サービスには、CORBAネーム・サービスのサーバー・プロセスの管理、ネームスペースの名前のバインドとアンバインド、およびネームスペースの内容の表示のための次のコマンドが用意されています。
CORBAネーム・サービスのサーバー・プロセスを制御します。
cns CLOPT="[-A] [servopts options] --
[-b bucketcount]
[-c]
[-d]
[-f filename]
[-M maxiterators]
[-p [persiststoragefilename] ]"
CORBAネーム・サービスのサーバー・プロセスでは、CORBA CosNaming準拠のネーム・サービスが提供されます。使用するOracle Tuxedoアプリケーションに対して、そのOracle Tuxedoアプリケーションで使用される他のサーバー・プロセスと同様に、CORBAネーム・サービスのサーバー・プロセスとそのオプションを
UBBCONFIGファイルで定義する必要があります。
UBBCONFIGファイルの
CLOPTパラメータの2つのダッシュ(
--)の後に、
cnsコマンド行オプションを入力します。コマンド行オプションは次のとおりです。
ネーミング・コンテキストをメモリー内にロケートするために、サーバー・プロセスが内部で使用するハッシュ表のバケット数を指定します。各ネーミング・コンテキストには専用のハッシュ表があります。Oracle Tuxedoアプリケーションが各ネーミング・コンテキストで少数のバインディングを使用する場合は、小さいバケット数(4や5など)を使用してください。Oracle Tuxedoアプリケーションが各ネーミング・コンテキストで多数のバインディング(例: 1000)を使用する場合は、大きいバケット数(50など)を使用してください。
CORBAネーム・サービスのサーバー・プロセスの開始時に永続ストレージ・ファイルを圧縮します。ネーミング・コンテキストおよびアプリケーション・オブジェクトがネームスペースに追加されたり、ネームスペースから削除されるたびに、永続ストレージ・ファイルのサイズは増え続けます。圧縮により、永続ストレージ・ファイルのサイズを最小限にできます。バインドされていないバインディングは圧縮中に削除されます。バインディングが関連付けられているオブジェクトがネームスペースから削除されても、バインドされていないバインディングはネームスペース内に残ります。
-p コマンド行オプションは、
-c コマンド行オプションを指定する場合に指定する必要があります。
サーバー・プロセスの開始時に、関連付けのないコンテキストを削除するようにCORBAネーム・サービスのサーバー・プロセスに指示します。関連付けのないコンテキストは、他のどのコンテキストにもバインドされていないコンテキストです。これは、コンテキストに一度もバインドされていない可能性があり、バインディングが明示的に破棄されたか、再バインドによって破棄されています。
-pコマンド行オプションは、
-dコマンド行オプションを指定する場合に指定する必要があります。
CORBAネーム・サービスのサーバー・プロセスがネームスペースのルートのインターオペラブル・オブジェクト・リファレンス(IOR)を書き込む先のファイルを指定します。
任意の時点での未処理のバインディング・イテレータの最大数を定義します。
バインディング・イテレータは、クライアント・アプリケーションが
CosNaming::NamingContext::list()メソッドを使用する場合に作成されます。バインディング・イテレータを使用してクライアント・アプリケーションを実行した後にバインディング・イテレータを削除するには、クライアント・アプリケーションで
CosNaming::BindingIterator::destroy()メソッドを使用する必要があります。
クライアント・アプリケーションがバインディング・イテレータを明示的に削除しなかった場合は、
-Mコマンド行オプションで指定した値に数が達すると、CORBAネーム・サービスのサーバー・プロセスによってバインディング・イテレータが削除されます。バインディング・イテレータの最大数に達してから、新しいバインディング・イテレータを作成しようとすると、クライアント・アプリケーションで使用中のバインディング・イテレータがCORBAネーム・サービスのサーバー・プロセスによって破棄されます。
バインディング・イテレータは、使用履歴の最も古いアルゴリズムに基づいて削除されます。デフォルト値は20です。値を0にすると、バインディング・イテレータの数に上限がなくなります(バインディング・イテレータはCORBAネーム・サービスのサーバー・プロセスによって破棄されず、関連するメモリーも解放されません)。0の値を指定した場合は、クライアント・アプリケーションで
CosNaming::BindingIterator::destroy()メソッドを使用して、未使用のバインディング・イテレータを明示的に削除する必要があります。
-p [persistentstoragefilename]
指定したファイルを使用して現在のネームスペースのコピーを永続ストレージに保存するようにCORBAネーム・サービスのサーバー・プロセスに指示します。ファイル名が指定されていない場合は、
CNS_PERSIST_FILE環境変数の値が使用されます。
CNS_PERSIST_FILE環境変数が設定されていない場合は、次のファイルが使用されます。
CORBAネーム・サービスのサーバー・プロセスの開始時に永続ストレージ・ファイルが読み取られます。永続ストレージ・ファイルは、ネームスペースに変更が加えられると追加されます。新しいネームスペースを作成する場合は、既存の永続ストレージ・ファイルを削除するか、CORBAネーム・サービスのサーバー・プロセスに新しい永続ストレージ・ファイルを作成する必要があります。
アプリケーション・オブジェクトおよびネーミング・コンテキストをネームスペースにバインドします。
注意:
|
cnsbindコマンドは、CosNamingインタフェースとやり取りします。このコマンドを使用するには、CORBAネーム・サービスのサーバー・プロセスを実行している必要があります。
|
cnsbind
[-C]
[-f root_context_filename]
[-h]
[-N]
[-o ior_filename]
[-r]
[-T TObjAddr]
bind_name
cnsbindコマンドでは、CORBA CosNamingインタフェースを使用して新しいアプリケーション・オブジェクトとネーミング・コンテキスト・オブジェクトをネームスペースにバインドします。このコマンドでは、連合型ネームスペースを簡単に作成できます。
cnsbindコマンドの起動時に例外が戻された場合は、コマンドが終了し、対応するメッセージが表示されます。
cnsbindコマンドのコマンド行オプションは次のとおりです。
cnsbindコマンドで、
bind_nameを名前に使用し、
-oコマンド行オプションで指定した
ior_filenameを使用してコンテキストを作成するように指定します。
-Cコマンド行オプションは、任意のネームスペースのネーミング・コンテキスト・オブジェクトを、指定したネームスペースに連合するのに使用されます。
ネームスペースの内容を変更するためにコマンドがやり取りするCORBAネーム・サービスのサーバー・プロセスのIORを格納するファイルを指定します。このコマンド行オプションが指定されていない場合、コマンドはNameService環境オブジェクトで
Tobj_Bootstrap::resolve_initial_references()メソッドを使用して、指定したOracle TuxedoドメインでCORBAネーム・サービスのサーバー・プロセスをロケートします。IORのホストとポートは
TOBJADDRの値に一致している必要があります。このコマンド行オプションは、
TOBJADDR環境変数の設定より優先されます。コマンド行オプションが指定されていない場合は、
TOBJADDR環境変数が使用されます。
新しいコンテキストを作成し、指定した名前を使用してネームスペースにバインドします。新しいコンテキストは
cnsbindコマンドによって作成されているため、
-oコマンド行オプションを
-Nコマンド行オプションとともに指定する必要はありません。
-oコマンド行オプションを
-Nコマンド行オプションとともに使用しても、
-oコマンド行オプションの情報は無視されます。
-fコマンド行オプションで指定したネームスペースにバインドするオブジェクトのIORを格納するファイルを指定します。
-Cコマンド行オプションが指定されている場合は、
ncontext型のオブジェクトが作成され、指定されていない場合は、
nobject型のオブジェクトが作成されます。
名前にすでにバインディングがある場合でも、アプリケーション・オブジェクトまたはネーミング・コンテキスト・オブジェクトのバインディングを作成します。
-rコマンド行オプションを指定しない
cnsbindコマンドのデフォルトの動作では、指定したオブジェクトのバインディングがすでに存在する場合に、
AlreadyBound例外が発生します。
cnsbindコマンドの呼出し時に、
AlreadyBoundまたはその他の例外が戻されると、コマンドが終了し、
"Error, already bound"のメッセージが表示されます。
Oracle Tuxedoドメインのホストとポートを指定します。CORBAネーム・サービスのサーバー・プロセスに接続する前に、サーバー・プロセスが実行されるOracle Tuxedoドメインに、
cnsbindコマンドでログインする必要があります。このコマンド行オプションは、
TOBJADDR環境変数の設定より優先されます。コマンド行オプションが指定されていない場合は、
TOBJADDR環境変数の値が使用されます。コマンド行オプションが指定されておらず、
TOBJADDRが設定されていない場合、プログラムはネイティブ・クライアントとして実行され、TGIOPプロトコルがロードされます。
TObjAddr指定の有効な形式は、
//hostname:port_numberです。
Tobj_Bootstrap::resolve_initial_referencesメソッドから取得されるルート・ネーミング・コンテキスト、または
-fコマンド行オプションから取得される文字列化されたIORで示されるネーミング・コンテキストに基づいて、ネームスペースに追加されるアプリケーション・オブジェクトまたはネーミング・コンテキスト・オブジェクトにバインドされる名前を指定します。
bind_name文字列は、Object Management Group (OMG)のインターオペラブル・ネーム・サービス(INS)仕様で指定した名前の文字列の形式に準拠する必要があります。
次の例は、アプリケーション・オブジェクトのバインディングを示しています。
cnsbind -o ./app_obj_ior.txt MyContext/AppObject1
次の例は、ネーミング・コンテキストのバインディングを示しています。
cnsbind -N MyContext/CtxObject1
次の例は、別のネームスペースへのフェデレーション・ポイントのバインディングを示しています。
cnsbind -C -o ./remote_ior.txt MyContext/RemoteNSCtx1
注意:
|
cnslsコマンドは、CosNamingインタフェースとやり取りします。このコマンドを使用するには、CORBAネーム・サービスのサーバー・プロセスを実行している必要があります。
|
cnsls
[-f root_context_filename]
[-h]
[-s]
[-R]
[-T TobjAddr]
[resolve_name]
cnslsコマンドでは、CORBA CosNamingインタフェースを使用してネームスペースの内容を表示します。非印字文字が
NameComponentデータ構造体の一部として使用されている場合、
cnslsコマンドの動作は未定義です。
cnslsコマンドの起動時に例外が発生すると、コマンドが終了し、対応するメッセージが表示されます。
cnslsコマンドのコマンド行オプションは次のとおりです。
ネームスペースの内容を変更するためにコマンドがやり取りするCORBAネーム・サービスのサーバー・プロセスのIORを格納するファイルを指定します。このコマンド行オプションが指定されていない場合、コマンドはNameService環境オブジェクトで
Tobj_Bootstrap::resolve_initial_references()メソッドを使用して、指定したOracle TuxedoドメインでCORBAネーム・サービスのサーバー・プロセスをロケートします。IORのホストとポートは
TObjAddrの値に一致している必要があります。このコマンド行オプションは、
TOBJADDR環境変数の設定より優先されます。コマンド行オプションが指定されていない場合は、
TOBJADDR環境変数の値が使用されます。
resolve_nameコマンド行オプションで指定されたネームスペース名の文字列化されたIORを表示します。
resolve_nameで始まるネームスペースのバインディングを再帰的に表示します。このコマンド行オプションを
cnslsコマンドに指定すると、このような境界が交差している場合にも何も示されずに境界を越える可能性があります。また、ネームスペース情報に循環が存在する場合に、このコマンド行オプションを
cnslsコマンドに指定すると、ループに入る可能性があります。
Oracle Tuxedoドメインのホストとポートを指定します。CORBAネーム・サービスのサーバー・プロセスに接続する前に、サーバー・プロセスが実行されるOracle Tuxedoドメインに、
cnslsコマンドでログインする必要があります。このコマンド行オプションは、
TOBJADDR環境変数の設定より優先されます。コマンド行オプションが指定されていない場合は、
TOBJADDR環境変数が使用されます。
Tobj_Bootstrap::resolve_initial_references()メソッドによって取得されるルート・ネーミング・コンテキスト、または
-fコマンド行オプションから取得される文字列化されたIORで示されるネーミング・コンテキストに基づいて、ネーム・サービスで解決する名前を指定します。
resolve_name文字列は、OMG INS仕様で指定した名前の文字列の形式に準拠する必要があります。バックスラッシュ(
\)文字は、名前コンポーネントを区切るのに使用され、ピリオド(
.)文字は
idフィールドと
kindフィールドを区切ります。
このコマンド行オプションが指定されていない場合は、ルート・コンテキストが解決されます。
cnsls -R MyContext.kind/AnotherContext
[context] MyContext.kind/AnotherContext
[object] Obj1
[object] Obj2
[context] Ctx1
[object] AnotherObject
cnsunbind
[-D]
[-f root_context_filename]
[-h]
[-T TObjAddr]
bind_name
cnsubindコマンドでは、ネームスペースのバインディングを解除します。
cnsunbindコマンドの起動時に例外が戻されると、コマンドが終了し、対応するメッセージが表示されます。
cnsunbindコマンド行オプションは次のとおりです。
バインディングを解除した後に、
bind_nameにバインドされているネーミング・コンテキストを破棄します。コンテキストの削除時に
-Dコマンド行オプションを指定しても、コンテキストが別のバインディングの一部になっている場合は孤立しません。このコマンド行オプションでは、同時に複数のネーミング・コンテキスト・オブジェクトにバインドされた場合などに、バインディングが保留される可能性があるため、使用する場合は注意してください。
ネームスペースの内容を変更するためにコマンドがやり取りするCORBAネーム・サービスのサーバー・プロセスのIORを格納するファイルを指定します。このコマンド行オプションが指定されていない場合、コマンドはNameService環境オブジェクトで
Tobj_Bootstrap::resolve_initial_references()メソッドを使用して、指定したOracle Tuxedoドメイン用のサーバー・プロセスをロケートします。
Oracle Tuxedoドメインのホストとポートを指定します。CORBAネーム・サービスのサーバー・プロセスに接続する前に、サーバー・プロセスが実行されるOracle Tuxedoドメインに、
cnsbindコマンドでログインする必要があります。このコマンド行オプションは、
TOBJADDR環境変数の設定より優先されます。コマンド行オプションが指定されていない場合は、
TOBJADDR環境変数が使用されます。
Tobj_Bootstrap::resolve_initial_references()メソッドから取得されるルート・ネーミング・コンテキスト、または
-fコマンド行オプションから取得される文字列化されたIORで示されるネーミング・コンテキストに基づいて、ネームスペースから削除されるバインディングの名前を指定します。
bind_name文字列は、OMG INS仕様で指定した名前の文字列の形式に準拠する必要があります。
次の例は、ネームスペースのバインディングの解除を示しています。
cnsunbind MyContext/CtxObject1
次の例は、ネームスペースのバインディングの解除、およびバインドされているオブジェクトの破棄を示しています。
cnsunbind -D MyContext/CtxObject1
CORBAネーム・サービスには、次の機能と制限があります。
•
|
A NULL文字は、 id文字列と kind文字列の終端としてのみ使用します(空の文字列は有効とみなされます)。
|
•
|
CORBAネーム・サービスでは、名前コンポーネントの文字列の長さに制限がありません。
|
•
|
CORBAネーム・サービスでは、名前コンポーネントの最大数に制限がありません。ゼロの長さは無効です。
|
•
|
CORBAネーム・サービスでは、コンテキストのバインディング数に制限がありません。
|
•
|
CORBAネーム・サービスでは、バインディング数(実装全体)に制限がありません。
|
•
|
CORBAネーム・サービスでは、コンテキスト数に制限がありません。
|
•
|
CORBAネーム・サービスでは、CORBAネーム・サービスのサーバー・プロセスの開始時に、関連付けのないネーミング・コンテキストとバインドされていないバインディングを削除します。
|
•
|
CORBAネーム・サービスでは、CORBAネーム・サービスのサーバー・プロセスの開始時に、関連付けのないネーミング・コンテキストを削除します。
|
•
|
CORBAネーム・サービスでは、 CannotProceed例外をスローしません。
|
NameService環境オブジェクトへの初期リファレンスの取得
NameService環境オブジェクトは、ネームスペースのルートへの接続に使用できます。
NameService環境オブジェクトを使用する場合、オブジェクト・リクエスト・ブローカ(ORB)がネームスペースのルートをロケートします。BootstrapオブジェクトまたはCORBAインターオペラブル・ネーミング・サービス(INS)のブートストラップ処理メカニズムを使用すると、NameService環境オブジェクトへの初期リファレンスを取得できます。OracleクライアントORBを使用する場合は、Oracle専用のメカニズムを使用します。別のベンダーのクライアントORBを使用する場合は、CORBA INSメカニズムを使用します。
ネームスペースへの接続の詳細は、
「ステップ3: Oracle Tuxedoネームスペースに接続する」を参照してください。Oracle Tuxedoドメインのブートストラップ処理の詳細は、Oracle Tuxedoオンライン・ドキュメントの
『CORBAプログラミング・リファレンス』の第4章「CORBAブートストラップ処理のプログラミング・リファレンス」を参照してください。
CORBAネーム・サービスで使用するCosNamingデータ構造体
CORBAネーム・サービスでは、次のCosNamingデータ構造体を使用します。
NamingContextオブジェクトは、オブジェクト・リクエスト・ブローカ(ORB)オブジェクトまたは他の
NamingContextオブジェクトにバインドされている名前のリストの格納および操作に使用されます。Oracle Tuxedo CORBAクライアント・アプリケーションは、このインタフェースを使用して、コンテキスト内のすべての名前を解決またはリストします。Oracle Tuxedo CORBAサーバー・アプリケーションでは、このオブジェクトを使用して、名前をアプリケーション・オブジェクトまたはネーミング・コンテキスト・オブジェクトにバインドします。
リスト2-1は、
NamingContextオブジェクトのOMG IDLを示します。
リスト2-1
NamingContextオブジェクトのOMG IDL
module CosNaming {
interface NamingContext {
void bind(in Name, in Object obj)
raises(NotFound, CannotProceed, InvalidName, AlreadyBound);
void rebind(in Name, in Object obj)
raises(NotFound, CannotProceed, InvalidName);
void bind_context(in Name n, in NamingContext nc)
raises(NotFound, CannotProceed, InvalidName, AlreadyBound);
void rebind_context(in Name n, in NamingContext nc)
raises(NotFound, CannotProceed, InvalidName);
Object resolve(in Name n)
raises(NotFound, CannotProceed, InvalidName);
void unbind(in Name n)
raises(NotFound, CannotProceed, InvalidName);
NamingContext new_context
NamingContext bind_new_context(in Name n)
raises(NotFound, CannotProceed, InvalidName, AlreadyBound);
void destroy()
raises(NotEmpty);
void list(in unsigned long how_many,
out BindingList bl,
out BindingIterator bi);
}
}
CosNaming::NamingContext::bind()
最初のNameComponentデータ構造体に関連付けられているコンテキストを解決し、次に新しいコンテキストにオブジェクトをバインドして、指定したオブジェクトを指定の名前にバインドしようとします。
void bind(in Name n, in Object obj);
目的のオブジェクト名で初期化される
Nameデータ構造体。
bind()メソッドまたは
bind_context()メソッドの
Nameが、ネーミング・コンテキスト内の別のオブジェクトにすでにバインドされています
。
指定した
Nameにゼロの名前コンポーネントがあるか、最初の名前コンポーネントの1つがネーミング・コンテキストに解決されていません。
Nameまたはそのコンポーネントの1つが見つからなかったことを示します。
bindでバインドされているネーミング・コンテキストは、解決するために複合名が渡されるときに名前解決に参加しません。
CosNaming::NamingContext::bind_context()
このメソッドは、指定したNameがNamingContextオブジェクトに関連付けられている点を除いて、bind()メソッドと同じです。
void bind_context(in Name n, in NamingContext nc);
目的のネーミング・コンテキスト名で初期化される
Nameデータ構造体。シーケンス内の最初の
NameComponentデータ構造体をネーミング・コンテキストに解決する必要があります。
指定した名前にバインドする
NamingContextオブジェクト。
bind()メソッドまたは
bind_context()メソッドの
Nameが、ネーミング・コンテキスト内の別のオブジェクトにすでにバインドされています。
指定した
Nameにゼロの名前コンポーネントがあるか、最初の名前コンポーネントの1つがネーミング・コンテキストに解決されていません。
Nameまたはそのコンポーネントの1つが見つからなかったことを示します。
NULLコンテキストにバインドするための呼出しが試行されたことを示します。
bind_context()でバインドされているネーミング・コンテキストは、解決するために複合名が渡されるときに名前解決に参加します。
CosNaming::NamingContext::bind_new_context()
新しいコンテキストを作成し、このコンテキスト内で指定したNameにバインドします。
NamingContext bind_new_context(in Name n);
新しく作成された
NamingContextオブジェクト名で初期化される
Nameデータ構造体。
bind()メソッドまたは
bind_context()メソッドの
Nameが、ネーミング・コンテキスト内の別のオブジェクトにすでにバインドされています。
指定した
Nameにゼロの名前コンポーネントがあるか、最初の名前コンポーネントの1つがネーミング・コンテキストに解決されていません。
Nameまたはそのコンポーネントの1つが見つからなかったことを示します。
このメソッドでは、CosNaming::NamingContext::new_context()メソッドと
CosNaming::NamingContext::bind_context()メソッドを1つのメソッドにまとめます。
新しいNamingContextオブジェクトへの参照を戻します。
CosNaming::NamingContext::destroy()
NamingContextオブジェクトを削除します。後で
NamingContextオブジェクトに対する呼出しを試みると、
CORBA::NO_IMPLEMENT例外が発生します。
NamingContextオブジェクトにバインディングが格納されている場合、このメソッドでは
NotEmptyが発生します。
このメソッドを使用する前に、NamingContextオブジェクトにバインドされているすべてのすべてのネーム・オブジェクトを
CosNaming::NamingContext::unbind()メソッドを使用してアンバインドしてください。
CosNaming::NamingContext::list()
このネーミング・コンテキストによって格納されているすべてのバインディングを戻します。
void list(in unsigned_long how_many,
out BindingList bl,
out BindingIterator bi);
戻されたバインディングのリスト(各要素は、それぞれ
NameComponentオブジェクトを表す
Nameを格納するバインディングです)。各
Nameは、長さ1の名前のシーケンスである単純な名前です。リスト内のバインディング数が
how_manyの値を超えることはありません。
残りのバインディングをたどるための
BindingIteratorオブジェクトへの参照。
指定した
Nameにゼロの名前コンポーネントがあるか、最初の名前コンポーネントの1つがネーミング・コンテキストに解決されていません。
Nameまたはそのコンポーネントの1つが見つからなかったことを示します。
このメソッドでは、名前のバインディングのシーケンスを戻します。
blリストに該当するより多くの名前のバインディングが存在する場合は、
BindingIteratorオブジェクトが戻されます。
BindingIteratorオブジェクトを使用すると、バインディングの次のセットを取得できます。
BindingList (C++)オブジェクトでは、リクエストされた番号のバインディングがリストの最後にある場合は、その番号よりも小さい番号のバインディングを戻すことができます。
biで
NULL参照が戻された場合、
blにはすべてのバインディングが格納されています。
CosNaming::NamingContext::new_context()
新しいネーミング・コンテキストを作成します。新規作成されたコンテキストは、最初はどのNameにもバインドされていません。
NamingContext new_context();
新しいネーミング・コンテキストをName.にバインドするには、 CosNaming::NamingContext::bind_context()メソッドを使用します。
新しいネーミング・コンテキストへの参照を戻します。
CosNaming::NamingContext::rebind()
このメソッドは、bind()メソッドと同じです。違いは、
rebindメソッドでは
AlreadyBound例外が発生しないことです。指定した
Nameがすでに別のオブジェクトにバインドされている場合、そのバインディングは新しいバインディングで置き換えられます。
void rebind(in Name
n, in Object
obj);
目的のオブジェクト名で初期化される
Nameデータ構造体。
指定した
Nameデータ構造体にゼロの名前コンポーネントがあるか、最初の名前コンポーネントの1つがネーミング・コンテキストに解決されていません。
Nameまたはそのコンポーネントの1つが見つからなかったことを示します。バインディングがすでに存在するか、バインディングの型が間違っているために例外が発生した場合、例外の
rest_of_nameメンバーの長さは1になります。
rebind()でバインドされているネーミング・コンテキストは、解決するために複合名が渡されるときに名前解決に参加しません。
CosNaming::NamingContext::rebind_context()
このメソッドは、bind_context()メソッドと同じです。違いは、
rebind_contextメソッドでは
AlreadyBound例外が発生しないことです。指定した
Nameがすでに別のオブジェクトにバインドされている場合、そのバインディングは新しいバインディングで置き換えられます。
void rebind_context(in Name
n, in NamingContext
nc);
目的のオブジェクト名で初期化される
Nameデータ構造体。
再バインド対象の
NamingContextオブジェクト。
指定した
Nameデータ構造体にゼロの名前コンポーネントがあるか、最初の名前コンポーネントの1つがネーミング・コンテキストに解決されていません。
名前のコンポーネントでバインディングを識別しないか、バインディングの型が実行中の操作に対して間違っています。バインディングがすでに存在するか、バインディングの型が間違っているために例外が発生した場合、例外の
rest_of_nameメンバーの長さは1になります。
rebind_contextでバインドされているネーミング・コンテキストは、解決するために複合名が渡されるときに名前解決に参加しません。
CosNaming::NamingContext::resolve()
Object resolve(in Name
n);
目的のオブジェクト名で初期化される
Nameデータ構造体。
指定した
Nameデータ構造体にゼロの名前コンポーネントがあるか、最初の名前コンポーネントの1つがネーミング・コンテキストに解決されていません。
名前のコンポーネントでバインディングを識別しないか、バインディングの型が実行中の操作に対して間違っています。
指定したNameは、オブジェクトのバインドに使用される名前と正確に一致する必要があります。CORBAネーム・サービスでは、オブジェクトの型を戻しません。オブジェクトを適切な型にナロー変換する操作は、クライアント・アプリケーションで実行します。
CosNaming::NamingContext::unbind()
bind()メソッドの逆演算を実行し、指定した
Nameに関連付けられたバインディングを削除します。
目的のオブジェクト名で初期化される
Nameデータ構造体。
指定した
Nameデータ構造体にゼロの名前コンポーネントがあるか、最初の名前コンポーネントの1つがネーミング・コンテキストに解決されていません。
名前のコンポーネントでバインディングを識別しないか、バインディングの型が実行中の操作に対して間違っています。
このメソッドでは、名前とオブジェクト間のバインディングを削除します。オブジェクトは削除されません。オブジェクトを削除するには、CosNaming::NamingContext::unbind()メソッドを使用してから、
CosNaming::NamingContext::destroy()メソッドを使用します。
NamingContextExtオブジェクトでは、CORBAネーム・サービスのURLおよび文字列化された名前を使用するための方法が提供されます。
NamingContextExtオブジェクトは、
NamingContextオブジェクトから派生したものです。CORBAネーム・サービスのルートは
NamingContextExtオブジェクト(ルートは
NamingContextオブジェクトでもあります)であることに注意してください。
NamingContextExtオブジェクトへの参照を取得するのに特別な操作は必要ありません。
リスト2-2は、
NamingContextExtオブジェクトのOMG IDLを示しています。
リスト2-2
NamingContextExtオブジェクトのOMG IDL
module CosNaming {
interface NamingContextExt : NamingContext {
typedef string StringName;
typedef string Address;
typedef string URLString;
StringName to_string(in Name n)
raises(InvalidName);
Name to_name(in StringName sn)
raises(InvalidName);
exception InvalidAddress {};
URLString to_url(in Address addr, in StringName sn)
raises(InvalidAddress, InvalidName);
Object resolve_str(in StringName n)
raises(NotFound,
CannotProceed,
InvalidName,
AlreadyBound);
}
}
CosNaming::NamingContextExt::resolve_str()
文字列化された名前を取得してNameに変換し、それを解決します。
object resolve_str(in StringName n);
名前のコンポーネントでバインディングを識別しないか、バインディングの型が実行中の操作に対して間違っています。
CosNaming:NamingContext::resolve()メソッドと同じ方法で解決を実行する便利なメソッドです。このメソッドでは、文字列化された名前を
Nameオブジェクトではなく引数として受け付けます。文字列化された名前が無効か、メソッドでバインドできない場合は、エラーが戻されます。
CosNaming::NamingContextExt::to_name()
文字列化された名前を取得し、Nameオブジェクトを戻します。
Name to_name(in StringName sn);
Nameオブジェクトに対して解決する文字列化された名前。
このメソッドでは、文字列化された名前を受け付け、Nameオブジェクトを戻します。名前が無効の場合は、エラーが戻されます。
CosNaming::NamingContextExt::to_string()
Nameオブジェクトを受け付け、文字列化された名前を戻します。
StringName to_string(in Name
n);
文字列化された名前に変換する
Nameオブジェクト。
このメソッドでは、Nameを受け付け、文字列化された名前を戻します。名前が無効の場合は、エラーが戻されます。
CosNaming::NamingContextExt::to_URL()
URLと文字列化された名前を組み合せ、URL文字列を戻します。
CosNaming::NamingContextExt::to_URL()
URLString to_URL(in Address
addr, in StringName
sn);
URL。このパラメータが定義されていない場合は、IIOPプロトコルでローカル・ホスト名が使用されます。
URLと文字列化された名前を組み合せたURL文字列を戻します。
BindingIterator オブジェクトでは、クライアント・アプリケーションが、
NamingContextオブジェクトの
listメソッドで戻されるバインディングのバインドされていないコレクションをたどることができます。
BindingIteratorオブジェクトを使用すると、クライアント・アプリケーションは、各呼出しで取得されるバインディングの数を制御できます。
BindingIteratorオブジェクトのメソッドの呼出し間でネーミング・コンテキストが変更されると、以降の
next_one()メソッドまたは
next_n()メソッドの呼出しの動作は、実装によって異なります。
クライアント・アプリケーションがBindingIteratorオブジェクトを作成しても、
destroyメソッドを呼び出さないと、クライアント・アプリケーションはリソース不足になる場合があります。CORBAネーム・サービスでは、クライアント・アプリケーションに警告することなく、バインディング・イテレータをいつでも破棄できます。
BindingIteratorオブジェクトの呼出しで
OBJECT_NOT_EXIST例外を予期し、この例外を適切に処理できるようにクライアント・アプリケーションを記述する必要があります。
リスト2-3は、
BindingIteratorオブジェクトのOMG IDLを示しています。
リスト2-3
BindingIteratorオブジェクトのOMG IDL
module CosNaming {
interface BindingIterator {
boolean next_one(out Binding b);
boolean next_n(in unsigned long how_many,
out BindingList b);
void destroy();
};
}
CosNaming::BindingIterator::destroy()
BindingIteratorオブジェクトを破棄し、オブジェクトに関連するメモリーを解放します。このメソッドの呼出しに失敗すると、メモリーの使用量が増加します。
destroyメソッドの呼出し後にクライアント・アプリケーションが
BindingIteratorオブジェクトに対する操作を呼び出すと、
OBJECT_NOT_EXIST 例外が発生します。
CosNaming::BindingIterator::next_n()
リストからリクエストされたバインディングの番号を格納する
BindingListデータ構造体を戻します。戻されるバインディングの番号は、リクエストされた数がリストを超えている場合は、それよりも少なくなります。
boolean next_n(in unsigned_long
how_many, out BindingList
bl);
リクエストされた数を超えないバインディングを格納する
BindingList データ構造体。
how_manyパラメータの値がゼロの場合に発生します。
リストの上限に達した場合にCORBA::FALSEが戻されます。それ以外の場合は、
CORBA::TRUEが戻されます。
CosNaming::BindingIterator::next_one()
リスト内の次の
Bindingオブジェクトを戻します。
boolean next_one(out Binding
b);
リストの上限に達した場合にCORBA::FALSEが戻されます。それ以外の場合は、
CORBA::TRUEが戻されます。
この項では、CORBAネーム・サービスで発生する例外について説明します。
exception AlreadyBound{};
この例外は、指定した名前にオブジェクトがすでにバインドされている場合に発生します。1つのコンテキストで名前にバインドできるオブジェクトは1つのみです。
exception CannotProceed{};
この例外は、予期しない例外が発生して、メソッドで適切に処理できない場合に発生します。
exception InvalidAddress{};
この例外は、
Nameが無効の場合に発生します。長さがゼロの名前は無効です。
この例外は、バインディングを含む
NamingContextオブジェクトで
destroy()メソッドが使用されている場合に発生します。
NamingContextオブジェクトは、破棄する前に空になっている必要があります。
exception NotFound{NotFoundReason why; Name rest_of_name;};
この例外は、名前のコンポーネントでバインディングを識別しないか、バインディングの型が実行中の操作に対して間違っている場合に発生します。
whyパラメータはエラーの理由を示します。
rest_of_nameパラメータはエラーの原因を示します。次の原因が表示されます。
•
|
missing_node: rest_of_nameパラメータの最初の名前コンポーネントが、親コンテキスト内の名前でバインドされていないバインディングになっています。
|
•
|
not_context: ncontext型が要求されている場合に、 rest_of_nameパラメータの最初の名前コンポーネントが、 nobject型のバインディングになっています。
|
•
|
not_object: nobject型が要求されている場合に、 rest_of_nameパラメータの最初の名前コンポーネントが、 ncontext型のバインディングになっています。
|