|
注意 : | 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
パラメータで、ダブル ハイフン (--
) の後に、cns
コマンドライン オプションを入力します。コマンドライン オプションには、以下のものがあります。
-b
bucketcount
-c
-p
コマンドライン オプションは、-c
コマンドライン オプションの指定時に指定する必要があります。
-d
-p
コマンドライン オプションは、-d
コマンドライン オプションの指定時に指定する必要があります。
-f
filename
-M
maxiterators
CosNaming::NamingContext::list()
メソッドを使用したときに作成されます。クライアント アプリケーションは、使用を完了したバインディング イテレータを削除するために、CosNaming::BindingIterator::destroy()
メソッドを使用する必要があります。
-M
コマンドライン オプションで指定した数に達したときにバインディング イテレータを削除します。バインディング イテレータが最大数に達してから新しいバインディング イテレータを作成しようとすると、CORBA ネーム サービスのサーバ プロセスは、クライアント アプリケーションで使用中のバインディング イテレータを破棄します。
CosNaming::BindingIterator::destroy()
メソッドを使用して、未使用のバインディング イテレータを明示的に削除する必要があります。
-p [
persistentstoragefilename
]
CNS_PERSIST_FILE
環境変数の値が使用されます。CNS_PERSIST_FILE
環境変数を設定しなかった場合、以下のファイルが使用されます。
%APPDIR%¥cnspersist.dat
$APPDIR/cnspersist.dat
アプリケーション オブジェクトおよびネーミング コンテキストをネームスペースにバインドします。
注意 : | cnsbind コマンドは、CosNaming インタフェースとやり取りします。このコマンドを使用して CORBA ネーム サービスのサーバ プロセスを実行する必要があります。 |
cnsbind
[-C]
[-f root_context_filename
]
[-h]
[-N]
[-o ior_filename
]
[-r]
[-T TObjAddr
]
bind_name
cnsbind
コマンドは、CORBA CosNaming インタフェースを使用して新しいアプリケーション オブジェクトとネーミング コンテキスト オブジェクトをネームスペースにバインドします。このコマンドを使用すると、連合型ネームスペースを簡単に作成できるようになります。cnsbind
コマンドが呼び出されたときに例外が返されると、このコマンドは終了し、対応するメッセージが表示されます。
cnsbind
コマンドのコマンドライン オプションは以下のとおりです。
-C
cnsbind
コマンドが、bind_name
(名前)、および -o
コマンドライン オプションで指定した ior_filename
を使用してコンテキストを作成するように指定します。-C
コマンドライン オプションを使用して、あるネームスペースのネーミング コンテキスト オブジェクトを、指定したネームスペースに連合させます。
-f
root_context_filename
Tobj_Bootstrap::resolve_initial_references()
メソッドを使用し、指定した Oracle Tuxedo ドメインに対する CORBA ネーム サービスのサーバ プロセスをロケートします。IOR のホストとポートは、TOBJADDR
の値と一致していなければなりません。コマンドライン オプションは、TOBJADDR
環境変数の設定をオーバーライドします。コマンドライン オプションを指定しなかった場合、TOBJADDR
環境変数が使用されます。
-h
-N
cnsbind
コマンドが新しいコンテキストを作成するので、-N
コマンドライン オプションとともに -o
コマンドライン オプションを使用する必要はありません。-N
コマンドライン オプションとともに -o
コマンドライン オプションを使用しても、-o
コマンドライン オプションの情報は無視されます。
-o
ior_filename
-f
コマンドライン オプションで指定したネームスペースにバインドするオブジェクトの IOR を格納するファイルを指定します。-C
コマンドライン オプションを指定した場合は ncontext
型のオブジェクトが作成され、指定しなかった場合は nobject
型のオブジェクトが作成されます。
-r
-r
コマンドライン オプションを指定しない cnsbind
コマンドのデフォルトの動作では、指定したオブジェクトのバインディングが既に存在する場合に AlreadyBound
例外が発生します。cnsbind
コマンドが呼び出されたときに AlreadyBound
その他の例外が返された場合、コマンドは終了し、「Error, already bound
」というメッセージが表示されます。
T
TObjAddr
cnsbind
コマンドは、サーバ プロセスが実行される Oracle Tuxedo ドメインにログインする必要があります。コマンドライン オプションは、TOBJADDR
環境変数の設定をオーバーライドします。コマンドライン オプションを指定しなかった場合、TOBJADDR
環境変数の値が使用されます。コマンドライン オプションを指定せず、かつ TOBJADDR
を設定しなかった場合は、プログラムはネイティブ クライアントとして起動し TGIOP プロトコルをロードします。
bind_name
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
コマンドのコマンドライン オプションは以下のとおりです。
-f
root_context_filename
Tobj_Bootstrap::resolve_initial_references()
メソッドを使用し、指定した Oracle Tuxedo ドメインに対する CORBA ネーム サービスのサーバ プロセスをロケートします。IOR のホストとポートは、TObjAddr
の値と一致していなければなりません。コマンドライン オプションは、TOBJADDR
環境変数の設定をオーバーライドします。コマンドライン オプションを指定しなかった場合、TOBJADDR
環境変数の値が使用されます。
-h
-s
-R
resolve_name
で始まるネームスペースのバインディングを再帰的に表示します。このコマンドライン オプションによって、cnsls
コマンドは、フェデレーションの境界が交差している場合にも何も示されずに境界を越える可能性があります。また、ネームスペースの情報に循環が存在する場合、このコマンドライン オプションによって cnsls
コマンドがループに入る可能性もあります。
T
TObjAddr
cnsls
コマンドは、サーバ プロセスが実行される Oracle Tuxedo ドメインにログインする必要があります。コマンドライン オプションは、TOBJADDR
環境変数の設定をオーバーライドします。コマンドライン オプションを指定しなかった場合、TOBJADDR
環境変数が使用されます。
resolve_name
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
cnsunbind
コマンドは、ネームスペースのバインディングを解除します。cnsunbind
コマンドが呼び出されたときに例外が返されると、このコマンドは終了し、対応するメッセージが表示されます。
cnsunbind
コマンドライン オプションは、以下のとおりです。
-D
bind_name
にバインドされているネーミング コンテキストを破棄します。コンテキストを破棄するときに -D
コマンドライン オプションを指定しても、コンテキストがほかのバインディングの一部になっている場合は孤立化されません。同時に複数のネーミング コンテキスト オブジェクトにバインドされた場合などにバインディングが保留される可能性があるので、このコマンドライン オプションの使用には注意する必要があります。
-f
root_context_filename
Tobj_Bootstrap::resolve_initial_references()
メソッドを使用し、指定した Oracle Tuxedo ドメインに対するサーバ プロセスをロケートします。
-h
T
TObjAddr
cnsbind
コマンドは、サーバ プロセスが実行される Oracle Tuxedo ドメインにログインする必要があります。コマンドライン オプションは、TOBJADDR
環境変数の設定をオーバーライドします。コマンドライン オプションを指定しなかった場合、TOBJADDR
環境変数が使用されます。
bind_name
Tobj_Bootstrap::resolve_initial_references()
メソッドから取り出したルート ネーミング コンテキスト、または -f
コマンドライン オプションから取得した文字列の IOR に示されているネーミング コンテキストを基にしたネームスペースから解除するバインディングの名前を指定します。bind_name
文字列は、OMG INS 仕様で指定した名前の文字列の形式に従っている必要があります。
次の例は、ネームスペースからのバインディングの解除を示しています。
cnsunbind MyContext/CtxObject1
次の例は、ネームスペースからのバインディングの解除、およびバインドされているオブジェクトの破棄を示しています。
cnsunbind -D MyContext/CtxObject1
CORBA ネーム サービスには、以下の機能と制限があります。
NULL
文字は、id
文字列と kind
文字列の終端としてのみ使用します (空の文字列は有効と見なされます)。CannotProceed
例外を送出しません。
NameService
環境オブジェクトは、ネームスペースのルートへの接続に使用できます。NameService
環境オブジェクトを使用する場合、オブジェクト リクエスト ブローカ (ORB) がネームスペースのルートをロケートします。Bootstrap オブジェクトまたは CORBA インターオペラブル ネーミング サービス (INS) のブートストラップ処理メカニズムを使用すると、NameService 環境オブジェクトへの初期リファレンスを取得できます。Oracle クライアント ORB を使用する場合は、Oracle 社固有のメカニズムを使用します。別のベンダのクライアント ORB を使用する場合は、CORBA INS メカニズムを使用します。
ネームスペースへの接続の詳細については、「ステップ 3: Oracle Tuxedo ネームスペースに接続する」を参照してください。Oracle Tuxedo ドメインのブートストラップ処理の詳細については、Oracle Tuxedo オンライン マニュアルの『Tuxedo CORBA プログラミング リファレンス』の「CORBA ブートストラップ処理のプログラミング リファレンス」を参照してください。
CORBA ネーム サービスは、以下の CosNaming データ構造体を使用します。
NamingContext
オブジェクトは、オブジェクト リクエスト ブローカ (ORB) オブジェクトまたはほかの NamingContext
オブジェクトにバインドされている名前のリストを格納および操作するのに使用します。Oracle Tuxedo CORBA クライアント アプリケーションは、このインタフェースを使用して、コンテキスト内のすべての名前を解決またはリストします。Oracle Tuxedo CORBA サーバ アプリケーションは、このオブジェクトを使用して、アプリケーション オブジェクトまたはネーミング コンテキスト オブジェクトに名前をバインドします。コード リスト 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);
}
}
最初の NameComponent
データ構造体に関連付けられているコンテキストを解決し、オブジェクトを新しいコンテキストにバインドすることで、指定したオブジェクトを指定した名前にバインドしようとします。
void bind(in Name
n
, in Object
obj
);
n
obj
AlreadyBound
InvalidName
NotFound
bind
にバインドされたネーミング コンテキストは、複数の名前を解決のために渡すときに名前解決に参加しません。
このメソッドは、bind()
メソッドとほぼ同じですが、指定した Name
が NamingContext
オブジェクトに関連付けられています。
void bind_context(in Name
n
, in NamingContext
nc
);
n
nc
AlreadyBound
InvalidName
NotFound
BAD_PARAM
bind_context()
にバインドされたネーミング コンテキストは、複数の名前を解決のために渡すときに名前解決に参加しません。
新しいコンテキストを作成し、コンテキスト内で指定した Name
にバインドします。
NamingContext bind_new_context(in Name n);
n
AlreadyBound
InvalidName
NotFound
このメソッドは、CosNaming::NamingContext::new_context()
メソッドと CosNaming::NamingContext::bind_context()
メソッドを 1 つにまとめたものです。
新しい NamingContext
オブジェクトに対するリファレンスを返します。
NamingContext
オブジェクトを削除します。削除した後で NamingContext
オブジェクトに対する呼び出しを実行すると、CORBA::NO_IMPLEMENT
例外が発生します。
void destroy();
NotEmpty
このメソッドを使用する前に、NamingContext
オブジェクトにバインドされているすべてのネーム オブジェクトに対して、CosNaming::NamingContext::unbind()
メソッドでアンバウンドする必要があります。
このネーミング コンテキストによって格納されているすべてのバインディングを返します。
void list(in unsigned_long
how_many
,
out BindingListbl
,
out BindingIteratorbi
);
how_many
bl
NameComponent
オブジェクトを表す Name
を含むバインディングです。それぞれの Name
は単純な名前です。つまり、長さ 1 の名前のシーケンスです。リスト内のバインディングの数は、how_many
の値を超えません。
bi
InvalidName
NotFound
このメソッドは、名前のバインディングのシーケンスを返します。bl
リストに当てはまるよりも多くの名前のバインディングが存在する場合、BindingIterator
オブジェクトが返されます。BindingIterator
オブジェクトを使用して、バインディングの次のセットを取得できます。BindingList
(C++) オブジェクトは、要求された番号よりも少ないバインディングしかない場合、リストの最後にあるバインディングの番号を返します。bi
が NULL
リファレンスを返した場合、bl
にはすべてのバインディングが含まれています。
新しいネーミング コンテキストを作成します。新しく作成されたコンテキストは、最初はどの Name
にもバインドされていません。
NamingContext new_context();
CosNaming::NamingContext::bind_context()
メソッドを使用して、新しいネーミング コンテキストを Name
にバインドします。
新しいネーミング コンテキストに対するリファレンスを返します。
このメソッドは、bind()
メソッドとほぼ同じです。違いは、rebind
メソッドでは AlreadyBound
例外が発生しないという点です。指定した Name
が既にほかのオブジェクトにバインドされている場合、そのバインディングは新しいバインディングに置き換えられます。
void rebind(in Namen
, in Objectobj
);
n
obj
InvalidName
NotFound
Name
またはそのコンポーネントのいずれか 1 つが見つからなかったことを示します。バインディングが既に存在しているか、またはバインディングが不正なタイプのものであるために例外が発生した場合、例外の rest_of_name
メンバーには長さ 1 があります。
rebind()
メソッドにバインドされたネーミング コンテキストは、複数の名前を解決のために渡すときに名前解決に参加しません。
このメソッドは、bind_context()
メソッドとほぼ同じです。違いは、rebind_context
メソッドでは AlreadyBound
例外が発生しないという点です。指定した Name
が既にほかのオブジェクトにバインドされている場合、そのバインディングは新しいバインディングに置き換えられます。
void rebind_context(in Namen
, in NamingContextnc
);
n
nc
InvalidName
NotFound
rest_of_name
メンバーには長さ 1 があります。
rebind_context
メソッドにバインドされたネーミング コンテキストは、複数の名前を解決のために渡すときに名前解決に参加しません。
Object resolve(in Name n
);
n
InvalidName
NotFound
指定した Name
は、オブジェクトのバインドに使用する名前と同じものでなければなりません。CORBA ネーム サービスは、オブジェクトのタイプを返しません。クライアント アプリケーションでは、オブジェクトを適切なタイプにナロー変換します。
指定した Name
に関連付けられたバインディングを削除し、bind()
メソッドとは逆のオペレーションを実行します。
void unbind(in Name
n
);
n
InvalidName
NotFound
このメソッドは、名前とオブジェクトの間のバインディングを削除します。オブジェクトは削除されません。オブジェクトを削除するには、CosNaming::NamingContext::unbind()
メソッドを使用してから、CosNaming::NamingContext::destroy()
メソッドを使用します。
NamingContextExt
オブジェクトは、CORBA ネーム サービスで URL と文字列化された名前を使用する方法を提供します。NamingContextExt
オブジェクトは、NamingContext
オブジェクトから派生したものです。CORBA ネーム サービスのルートは、NamingContextExt
オブジェクトです (つまり、ルートは NamingContext
オブジェクトでもあります)。NamingContextExt
オブジェクトのリファレンスを取得するのに特別なオペレーションは必要ありません。コード リスト 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);
}
}
文字列化された名前を取り、それを Name
に変換し、解決します。
object resolve_str(in StringName
n
);
n
InvalidName
NotFound
これは、CosNaming:NamingContext::resolve()
メソッドと同じ方法で解決を実行する便利なメソッドです。メソッドは、文字列化された名前を Name
オブジェクトではなく引数として受け付けます。文字列化された名前が不正な場合、または文字列化された名前をバインドできなかった場合、メソッドはエラーを返します。
文字列化された名前を取り、Name
オブジェクトを返します。
Name to_name(in StringName
sn
);
sn
InvalidName
このメソッドは、文字列化された名前を受け付け、Name
オブジェクトを返します。名前が不正な場合、メソッドはエラーを返します。
Name
オブジェクトを受け付け、文字列化された名前を返します。
StringName to_string(in Name n
);
n
InvalidName
このメソッドは、Name
オブジェクトを受け付け、文字列化された名前を返します。名前が不正な場合、メソッドはエラーを返します。
URL と文字列化された名前を組み合わせ、URL 文字列を返します。
CosNaming::NamingContextExt::to_URL(
)
URLString to_URL(in Addressaddr
, in StringNamesn
);
addr
sn
InvalidAddress
InvalidName
URL と文字列化された名前を組み合わせた URL 文字列を返します。
BindingIterator
オブジェクトを使用すると、クライアント アプリケーションは、NamingContext
オブジェクトの list
メソッドで返されたバインディングのアンバウンディッド コレクションをたどることができます。BindingIterator
オブジェクトを使用すると、クライアント アプリケーションは、各呼び出しで取得したバインディング数を制御できます。BindingIterator
オブジェクトのメソッドの呼び出しの間にネーミング コンテキストが変更された場合、以降の next_one()
メソッドまたは next_n()
メソッドの呼び出しの動作は、実装によって異なります。
BindingIterator
オブジェクトを作成しても、destroy
メソッドを呼び出さない場合、クライアント アプリケーションはリソース不足になる場合があります。CORBA ネーム サービスでは、クライアント アプリケーションに通知せずに、いつでもバインディング イテレータを破棄できます。BindingIterator
オブジェクトに対する呼び出しで OBJECT_NOT_EXIST
例外を予期し、この例外を適切に処理するようにクライアント アプリケーションを記述する必要があります。
コード リスト 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();
};
}
BindingIterator
オブジェクトを破棄し、オブジェクトに関連付けられているメモリを解放します。このメソッドの呼び出しに失敗すると、メモリの使用量が増加します。
void destroy();
destroy
メソッドを呼び出した後に、クライアント アプリケーションが BindingIterator
オブジェクトに対するオペレーションを呼び出すと、OBJECT_NOT_EXIST
例外が発生します。
リストから要求したバインディングの番号を格納する BindingList
データ構造体を返します。返されたバインディングの番号は、要求された数がリストを超えている場合は、それよりも小さくなります。
boolean next_n(in unsigned_longhow_many
, out BindingListbl
);
how_many
bl
BAD_PARAM
リストの上限に達している場合に、CORBA::FALSE
が返されます。それ以外の場合、CORBA::TRUE
が返されます。
boolean next_one(out Binding b
);
b
リストの上限に達している場合に、CORBA::FALSE
が返されます。それ以外の場合、CORBA::TRUE
が返されます。
ここでは、CORBA ネーム サービスで発生する例外について説明します。
exception AlreadyBound{};
この例外は、指定した名前にオブジェクトがバインドされている場合に発生します。1 つのコンテキストで名前にバインドできるオブジェクトは 1 つだけです。
exception CannotProceed{};
NamingContext
cxt
Name
rest_of_name
この例外は、予期しない例外のためにメソッドが適切に処理できなくなったときに発生します。
exception InvalidAddress{};
exception InvalidName{};
名前
が無効の場合に発生します。長さ 0 の名前は無効です。
exception NotEmpty{};
この例外は、バインディングを含む NamingContext
オブジェクトに対して destroy()
メソッドが使用されたときに発生します。NamingContext
オブジェクトは、破棄する前に空になっている必要があります。
exception NotFound{NotFoundReason why; Name rest_of_name;};
why
rest_of_name
この例外は、名前のコンポーネントがバインディングを識別しなかったか、バインディングのタイプが実行中のオペレーションに対して不正だった場合に発生します。why
パラメータは、エラーの理由を示します。rest_of_name
パラメータは、エラーの原因を示します。以下の原因が表示されます。