1

RMI用のカスタムクライアントソケットファクトリを作成したので、ファイアウォールが原因で直接ソケット接続が利用できない場合は、HTTPにフォールバックします。これはJava6でうまく機能しました。Java7では、RMISocketFactory.setSocketFactory(mySocketFactory)を呼び出すと、次のエラーメッセージが表示されます。

java.net.SocketException:ファクトリはすでに定義されています

RMISocketFactory.getSocketFactory()を呼び出すと、インストールされているファクトリがcom.sun.deploy.net.protocol.rmi.DeployRMISocketFactoryのインスタンスであることがわかります。http接続のURLをカスタマイズしたため、デフォルトのHTTPフォールバックメカニズムを使用できません(/ cgi / java-rmiパスを使用できません)。

setSocketFactory()がプロセスごとに1回しか呼び出せないと定義されているのに、Java 7がソケットファクトリをプレインストールするのはなぜですか?どうすれば自分のソケットファクトリを使用できるようになりますか?

4

1 に答える 1

1

前世紀の 1.2 で導入された RMIClientSocketFactory メカニズムを介して、オブジェクトごとのソケット ファクトリを使用する必要があります。

于 2012-10-06T01:51:26.367 に答える