3

IP:192.168.133.2の仮想マシン(Windows XPを実行)でRMI Regitryを実行しており、次のコードを使用してRMIサーバー(異なるvm XP IP:192.168.133.3で実行)をバインドしようとしています:

Naming.rebind("//192.168.133.2/rmi.2", new RMI());

どこ

public class RMI extends UnicastRemoteObject

しかし、私はこの例外を受け取ります:

    java.rmi.AccessException: Registry.Registry.rebind disallowed; origin /192.168.133.3 is non-local host

RMIレジストリは、同じRMIレジストリ実行マシンで実行されていないrmiサーバーを受け入れないことがわかりました。

しかし、このレジストリに私のrmiサーバーを受け入れさせるにはどうすればよいですか?

ps:JBuilderXをIDEとして使用しています。

私は、いくつかのrmiサーバーで実行され、それらでいくつかの作業を行い、結果を開始ステーションに返すモバイルエージェントを実装しようとしています。これにより、RMIサーバーは、このエージェントをホストする環境を実装して、その作業を実行し、次のサーバーに送信します。レジストリを介して検索するステーション

4

2 に答える 2

4

RMI サーバーをバインドしようとしています (別の vm XP IP: 192.168.133.3 で実行されています)

すぐそこでやめなさい。そんなことはできません。RMI サーバーは、バインドを実行しているエージェントと同じホストで実行されているレジストリにのみバインドできます。

これは必ずしもリモート オブジェクト自体が実行されているホストと同じであるとは限らないことに注意してください。たとえば、クライアントはリモート レジストリを検索し、取得したスタブをローカル レジストリにバインドできます。ただし、リモート レジストリには何もバインドできません。

于 2012-12-13T09:47:14.883 に答える
1

RMI は、いかなる種類の「連合」または分散ネーム サービスも提供しません。

RMI は、サーバー上で RMI レジストリを実行できるように構成されています。ネットワーク経由でアクセスできるサービスをホストしますが、サービスはそのサーバー上でローカルに実行されます。

提供されるサービスは、クライアント システムではなくサーバー上で開始し、「再バインド」する必要があります。ローカル アドレスのみ。

その後、クライアントはそのサーバーに到達する必要があります...

于 2012-12-12T22:22:56.630 に答える