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