Java RMI绑定同一对象两次,但呈现不同的接口
嘿,伙计们,我这里有一个有趣的给你们 我有一个叫做服务器的对象,它实现了两个RMI接口,CSCP和ISCP。 我需要我的客户端能够在RMI CSCP接口上通信,但不知道ISCP接口,我需要其他服务器在ISCP接口上与它通信,但不知道CSCP接口。到目前为止和我在一起 基本上,目前我已经将其设置为绑定两次,一次绑定到注册中心的“ISCP”,一次绑定到“CSCP” 然而,当客户机尝试绑定时(请记住,他们只知道CSCP接口),他们会得到一个异常,说他们找不到类ISCP,但他们应该不需要它 那么,如何让一个对象(服务器)在两个不同的RMI绑定上呈现两个不同的RMI接口,使它们保持分离 如果你能帮我解决这个问题,你就是个天才;如果我不够清楚,请告诉我 尝试使用和绑定不同名称下的相同对象使用不同的接口-它使用反射绑定任何Java对象(即不需要实现Java RMI绑定同一对象两次,但呈现不同的接口,java,binding,interface,rmi,Java,Binding,Interface,Rmi,嘿,伙计们,我这里有一个有趣的给你们 我有一个叫做服务器的对象,它实现了两个RMI接口,CSCP和ISCP。 我需要我的客户端能够在RMI CSCP接口上通信,但不知道ISCP接口,我需要其他服务器在ISCP接口上与它通信,但不知道CSCP接口。到目前为止和我在一起 基本上,目前我已经将其设置为绑定两次,一次绑定到注册中心的“ISCP”,一次绑定到“CSCP” 然而,当客户机尝试绑定时(请记住,他们只知道CSCP接口),他们会得到一个异常,说他们找不到类ISCP,但他们应该不需要它 那么,如何让
远程
),类似于查找和调用方法
<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