繁体   English   中英

RMI:来自服务器的对象,引用为UnicastRemoteObject

[英]RMI: object from server with reference as UnicastRemoteObject

我没有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 (在getWrapper()上)传输到RmiClientRmiServer Foo实现了Remote接口,并且其对象没有传输到RmiClient ,而是传输了对UnicastRemoteObject引用。 因此,当在客户端Wrapper.doIt()时,则在服务器端Foo.doIt() 这是正确的吗? 如果没有,该如何解决?

一切都是毫无意义的。 导出的远程对象已被序列化为其存根。 存根已经可以序列化了。 包装器类在这里没有添加任何有用的东西。 扔掉它,直接使用存根即可。

您要我们注意的行仅导出远程对象。 没有什么令人吃惊的。

因此,当在客户端Wrapper.doIt()时,则在服务器端Foo.doIt()

Wrapper.doIt()调用foo.doIt() ,该Foo.doIt()在服务器上执行Foo.doIt() 但是,如果客户端直接调用foo.doIt()也会发生同样的事情。 这正是RMI已经做的。

这是正确的吗?

是。

如果没有,该如何解决?

我无法解释。 有人添加了一个无意义的包装器类。 不要模仿。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM