1

我已经为 RMI 编写了一个自定义客户端套接字工厂,因此如果由于防火墙而导致直接套接字连接不可用,我将回退到 HTTP。这适用于 Java 6。在 Java 7 中,当我调用 RMISocketFactory.setSocketFactory(mySocketFactory) 时,我收到以下错误消息:

java.net.SocketException:工厂已经定义

调用 RMISocketFactory.getSocketFactory() 表明安装的工厂是 com.sun.deploy.net.protocol.rmi.DeployRMISocketFactory 的一个实例。我不能使用默认的 HTTP 回退机制,因为我已经为 http 连接自定义了 URL(我不能使用 /cgi/java-rmi 路径)。

当 setSocketFactory() 被定义为每个进程只能调用一次时,为什么 Java 7 会预先安装一个套接字工厂?我怎样才能让它使用我自己的套接字工厂?

4

1 回答 1

1

您应该通过上世纪 1.2 中引入的 RMIClientSocketFactory 机制来使用每个对象的套接字工厂。

于 2012-10-06T01:51:26.367 回答