既存の実行中の CORBA ネーミング サービスには、 org.omg.CosNamingパッケージのクラスを介してアクセスできます。を取得する必要がありNamingContextExt
ます。名前でオブジェクトを解決するだけでなく、すべての既存のバインディングを反復処理するメソッドがあります。
ツールを起動するとtnameserv
、IOR が出力されます。これは CORBA URL です。ネットワーク経由でアクセスでき、IOR を提供する場合、世界中の任意の ORB から CORBA オブジェクト (ネーム サービスを含む) を取得できます。
public static void main(String args[]) throws Exception {
ORB orb = ORB.init(args, null);
// pass the IOR as command line parameter for this program
String ior = args[0];
org.omg.CORBA.Object objRef = orb.string_to_object(ior);
NamingContextExt nameService = NamingContextExtHelper.narrow(objRef);
// Now you can work with your naming service.
}
CORBA オブジェクトへのアクセス方法についてはこちらのチュートリアルを、ネーム サービスの操作方法についてはこちらを参照してください。
orb.resolve_initial_references("NameService")
デフォルトでは (構成されていない場合)、実行中の仮想マシンのローカル サービスが返されるため、外部のサービスにクエリを実行する必要があります。これを使用するには、ここで説明されているように、ORBInitRef.NameService プロパティをネーム サービスのアドレスに設定して、正しい構成プロパティ (この例では null である 2 番目のパラメーター) を渡す必要があります。多く (またはほとんど) の実稼働環境では、このメソッドが正しいリモート ネーム サービスを返すように、このプロパティが設定されています。
servertoolは、Java コードを記述せずに登録済みの CORBA オブジェクトを一覧表示できるコマンド ライン ツールです。対象のネーム サービスが実行されているホストを指定する必要があります。指定されたホストとポートでサービスが実行されている場合、servertool は文句を言いません。見つからない場合は文句を言うべきです!
最も重要なことは、CORBA オブジェクトを呼び出して、取得したネーム サービスに登録する必要があることです。
nameService.bind(yourName, yourCORBAObject);
ネーム サービスがリモートの場合は、Orb の URL とオブジェクトへの参照を含むネットワーク メッセージが送信されます。オブジェクトを登録しないと、もちろん参照はそこで利用できず、サーバーツールは文句を言うのと同じように空のリストを表示します。