解答:
1.“远程对象是能被另一个JVM调用得网络对象实现。它们实现远程接口,因此将能够被远程客户得方法暴露出来。”这是MATER EJB上的原话,可能不太好理解。远程对象就是在非调用端的类的实例(物理位置不定)。由于它们实现了远程接口,当调用端调用远程接口的时候,它们的方法就能被调用端的用户看到,因而也可以被调用。
2.非远程就是本地的拉。
3.序列化是为了网络传输,编组和解组是使得参数在请求的远程机器上可以使用的处理方法。为什么呢,因为在不同的机器里,参数在内存中的位置是不同的,需要影射到调用它的机器上的内存中吧。
  不需要网络传输的就不需要序列化和编组,原因就不用我说了吧。
  stub模拟了一个本地对象,所以它也成为了对象调用参数的代理(就是说,参数传递到了stub上),所以,你需要把它传递到远方(其实就是把参数传递到远方,让远方对象可以执行嘛)。

解决方案 »

  1.   

    谢谢你的解释!有点明白了.
    还有点疑惑,书上说发送远程对象实际上就是发送stub,现在比如server上有个远程对象,client调用,是不是服务器发送stub(stub那个类??)到客户端给客户??如果是这样的话,那么client上是不是不需要stub的那个类文件了??
      

  2.   

    “发送远程对象实际上就是发送stub?”首先,你要了解,在RMI中,远程对象是不会下载到你的本地执行的。你调用它的时候,是调用端(就是你)把被调用函数所需的参数传递到远方,然后服务器端再使用参数进行执行程序,然后把结果发送到你的机器上。
    stub也不是类,是个模拟的本地对象,就是说是模拟了远程对象,让你的机器以为远程对象就在本地,然后你的机器就会给stub这个“对象”传递它所需要的参数,然后呢,你的机器就把stub连同参数传递到远程机器上了。最后在远方,程序执行后,把结果再返回你的机器。
    你看的什么书?翻译的这么恶心!
      

  3.   

    声明:
    J2EE服务器提供生成需要的stub的方法,在SUN的J2EE包含了称为RMIC的工具,他可以生成stub类。
    书里写的stub不是指类,明白没?
      

  4.   

    明白了RMI的原理
    才能搞清stub和skeleton的。
      

  5.   

    刚才看了一遍sun的Tutorial,明白了很多。在我思想中RMI是这样:客户端请求服务器端的时候,他得到了remote object的引用(实际上就是stub),如果客户端本地没有stub的话就通过http协议或者file协议从服务器端下载stub,然后客户端调用remote method,实际上也就是把参数传递给了stub,下一步stub把自身以及参数传递给了服务器(这一步可能要序列化和编组),服务器接受了调用并把调用真正的传递给了remote object中的方法,此时,如果参数传递的是一个类,并且这个类不在服务器上,则服务器要通过http协议或者file协议从客户端下载,经过计算,结果被返回到客户端。实际情况是这样的嘛??
    如果是这样的还有一点问题哦,就是skeleton是干嘛的,是不是调用真正的remote object时用的?
    请继续回答,谢谢,弄懂之后,另开贴给分!!!
      

  6.   

    就是这样.
    远程对象需要接受来自skeleton的调用,skeleton相对于远程对象来说是本地的。skeleton负责接收来自网络的调用请求,然后将该调用分配给远程对象的执行代码。所以说,就是调用真正的remote object时用的。给分吧,哈哈。