Java RMI绑定同一对象两次,但呈现不同的接口

Java RMI绑定同一对象两次,但呈现不同的接口,java,binding,interface,rmi,Java,Binding,Interface,Rmi,嘿,伙计们,我这里有一个有趣的给你们 我有一个叫做服务器的对象,它实现了两个RMI接口,CSCP和ISCP。 我需要我的客户端能够在RMI CSCP接口上通信,但不知道ISCP接口,我需要其他服务器在ISCP接口上与它通信,但不知道CSCP接口。到目前为止和我在一起 基本上,目前我已经将其设置为绑定两次,一次绑定到注册中心的“ISCP”,一次绑定到“CSCP” 然而,当客户机尝试绑定时(请记住,他们只知道CSCP接口),他们会得到一个异常,说他们找不到类ISCP,但他们应该不需要它 那么,如何让

嘿,伙计们,我这里有一个有趣的给你们

我有一个叫做服务器的对象,它实现了两个RMI接口,CSCP和ISCP。 我需要我的客户端能够在RMI CSCP接口上通信,但不知道ISCP接口,我需要其他服务器在ISCP接口上与它通信,但不知道CSCP接口。到目前为止和我在一起

基本上,目前我已经将其设置为绑定两次,一次绑定到注册中心的“ISCP”,一次绑定到“CSCP”

然而,当客户机尝试绑定时(请记住,他们只知道CSCP接口),他们会得到一个异常,说他们找不到类ISCP,但他们应该不需要它

那么,如何让一个对象(服务器)在两个不同的RMI绑定上呈现两个不同的RMI接口,使它们保持分离

如果你能帮我解决这个问题,你就是个天才;如果我不够清楚,请告诉我

尝试使用和绑定不同名称下的相同对象使用不同的接口-它使用反射绑定任何Java对象(即不需要实现
远程
),类似于查找和调用方法

<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
  <property name="serviceName" value="ICSP"/>
  <property name="service" ref="myService"/>
  <property name="serviceInterface" value="example.ICSP"/>
</bean>

<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
  <property name="serviceName" value="CSCP"/>
  <property name="service" ref="myService"/>
  <property name="serviceInterface" value="example.CSCP"/>
</bean>

我建议编写两个适配器类,一个实现
ICSP
,另一个实现
CSCP
。这些适配器类中的每个方法都调用“real”对象中的相应方法

然后用不同的名称将这些适配器类绑定到RMI,而不是绑定原始对象。客户机可以根据他们拥有的接口检索他们想要的任何绑定对象


即使只有一个接口,这也是一个很好的实践,因为通常最好将业务对象与它们通信的远程传输机制(本例中为RMI)分离。必须导出两个远程接口使这种情况更加严重。

纯代码中有没有办法做到这一点?我不明白这是什么东西。。。我们没有使用IDE或任何类型的东西!嗯,如果你有Spring库,是的。以上内容与IDE无关——它只是使用SpringXML配置来描述运行时部署(即实例化什么、如何连接协作实例等)。这很值得熟悉。不过我会修改我的答案
RmiServiceExporter e = new RmiServiceExporter();
e.setServiceName("SCSP");
e.setService(myServiceObj);
e.setServiceInterface(example.SCSP.class);
e.prepare(); // read the doc; I'm not sure this is the exact method