3

我在一个远程对象像这样导出自己的框架中工作:UnicastRemoteObject.exportObject(this, port, csf, ssf);

这只是给定的,无法更改。我现在正在尝试包含RMIIO 库来进行远程迭代。RMIIO 使用 导出远程对象UnicastRemoteObject.exportObject(Remote, int),根据 Javadoc 使用 RMISocketFactory。默认情况下,RMIIO 将端口设置为 0(任何端口)。

现在我绝对需要 RMIIO 来重用所有其他对象使用的现有 RMI 端口(它是防火墙中唯一打开的端口),并且还尊重我对套接字工厂的设置,因为 SSL 和压缩等。什么是最好的除了更改第 3 方代码之外,如何做到这一点?我正在使用 Java 8。

我曾希望有系统属性可以让我从外部控制套接字工厂,但似乎没有。

所以现在我认为我需要以RMISocketFactory.setSocketFactory(RMISocketFactory)编程方式调用。那是对的吗?这对我来说听起来有点毛茸茸。当我这样做时,我不需要担心为 lib 指定端口,因为 RMI 会在我的套接字工厂适当地实现时自动尝试并重用它,这是否equals()正确hashCode()

塞巴斯蒂安

4

1 回答 1

1

我发现 RMIIO 库的一个特性确实解决了我的问题:您可以提供自己的类来导出远程对象。该类可以通过系统属性指定。因此,底层 Java 远程流实现与调用它的 RPC 框架分离。好设计!

于 2018-06-15T09:25:05.123 回答