我在一个框架中工作,在该框架中,远程对象将自己导出:
这只是给定的,无法更改。我现在正在尝试包括RMIIO lib来进行远程迭代。 RMIIO导出带有UnicastRemoteObject.exportObject(this, port, csf, ssf);
的远程对象,根据Javadoc,该对象使用UnicastRemoteObject.exportObject(Remote, int)
。默认情况下,RMIIO将端口设置为0(任何端口)。
现在,我绝对需要RMIIO来重用所有其他对象使用的现有RMI端口(这是在防火墙中打开的唯一端口),并且由于SSL和压缩等原因,还请尊重我对套接字工厂的设置。什么是最好的除了更改第三方代码外,还可以这样做吗?我正在使用Java 8。
我曾希望有一些系统属性可以允许我从外部控制套接字工厂,但似乎没有。
所以现在我认为我需要以编程方式调用RMISocketFactory
。那是对的吗?对我来说听起来有点毛。这样做是否正确,我不必担心为lib指定端口,因为当我的套接字工厂适当地实现RMISocketFactory.setSocketFactory(RMISocketFactory)
和equals()
时,RMI会自动尝试并重用它吗?
塞巴斯蒂安
最佳答案
我发现RMIIO库的一项功能确实解决了我的问题:您可以提供自己的类来进行远程对象的导出。可以通过系统属性指定该类。因此,底层的Java远程流实现与调用它的RPC框架分离。好的设计!