Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 导出远程对象时,如何强制RMIO库使用自定义RMI套接字工厂?_Java_Sockets_Rmi_Rmiio - Fatal编程技术网

Java 导出远程对象时,如何强制RMIO库使用自定义RMI套接字工厂?

Java 导出远程对象时,如何强制RMIO库使用自定义RMI套接字工厂?,java,sockets,rmi,rmiio,Java,Sockets,Rmi,Rmiio,我在一个框架中工作,远程对象像这样导出自己:UnicastRemoteObject.exportObject(this、port、csf、ssf) 这只是一个给定的,不能改变。我现在正试图包括ToDo远程迭代。RMIO使用UnicastRemoteObject.exportObject(remote,int)导出远程对象,根据Javadoc,它使用RMISocketFactory。默认情况下,RMIO将端口设置为0(任意端口) 现在,我绝对需要RMIO重用所有其他对象使用的现有RMI端口(这是防

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

这只是一个给定的,不能改变。我现在正试图包括ToDo远程迭代。RMIO使用
UnicastRemoteObject.exportObject(remote,int)
导出远程对象,根据Javadoc,它使用
RMISocketFactory
。默认情况下,RMIO将端口设置为0(任意端口)

现在,我绝对需要RMIO重用所有其他对象使用的现有RMI端口(这是防火墙中唯一打开的端口),并尊重我对套接字工厂的设置,因为SSL和压缩等。除了更改第三方代码之外,最好的方法是什么?我正在使用Java8

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

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


Sebastian

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

更改RMIO代码并将其贡献回项目。他们需要它。@EJP:这不是我问题的答案。我确实明确排除了这种可能性。(不幸的是,由于与我们商店的流程有关的原因,我无法进入这里。)如果有人回答这个问题,我仍然会很高兴。正确。这是评论,不是回答。除了我的评论之外,我没有其他答案。并且:“当我这样做时,我不需要担心为lib指定端口,因为当我的套接字工厂适当地实现
equals()
hashCode()
时,RMI会自动尝试并重用它,这是正确的吗?”是的。