2

実行中の Java (1.5) プログラムから corba ネームサービスにアクセスする方法はありますか? 特定のプロセスに登録されている他のプロセスを確認したいと思います。

私は、JRE 内に 3 つのツールがあることを知っています。servertool、しかし、それらを適切に使用orbdtnameservなかったか、適切なツールではありません。

追加情報: プログラムは-ORBInitialPort 1234

実行orbd -ORBInitialPort 1234-> と同じように、既に使用されているためエラーを返します (アプリケーションが実行されているため、問題ありません) tnameserv。しかし、 を使用するservertool -ORBInitialPort 1234と、エラーは発生しません。しかし、コマンド プロンプトまたは別のコマンドで「list」と入力すると、常に空のリストが返されます。

敬具クリスチャン

4

1 に答える 1

4

既存の実行中の 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 とオブジェクトへの参照を含むネットワーク メッセージが送信されます。オブジェクトを登録しないと、もちろん参照はそこで利用できず、サーバーツールは文句を言うのと同じように空のリストを表示します。

于 2013-01-11T15:29:02.310 に答える