【发布时间】:2016-07-24 19:30:47
【问题描述】:
我在 RMI 方面没有经验,我在互联网上找到了一些我不确定的代码。所以有rmi客户端和rmi服务器。
public class RmiServer{
public Wrapper getWrapper(){
return new Wrapper(new Foo());
}
}
public class Wrapper implements Serializable{
private FooI foo;
public Wrapper(FooI foo){
this.foo=foo;
}
public void doIt(){
foo.doIt();
}
}
public interface FooI extends Remote{
public void doIt();
}
public class Foo implements FooI{
public void doIt(){...}
public Foo(){
//PLEASE, PAY ATTENTION TO THIS LINE
UnicastRemoteObject.exportObject(this, 8888);
}
}
我用这种方式向自己解释这段代码。 Wrapper 类是可序列化的,这就是为什么它的对象从 RmiServer 转移到 RmiClient(在 getWrapper() 上)。 Foo 实现了Remote 接口,它的对象没有被转移到RmiClient,而不是这个对UnicastRemoteObject 的引用被转移。因此,当在客户端调用 Wrapper.doIt() 时,在服务器端调用 Foo.doIt()。这是正确的吗?如果不是,如何解释这个解决方案?
【问题讨论】: