http://java.sun.com/docs/books/tutorial/rmi/
创建根与干

解决方案 »

  1.   

    from(Thinking in java)
    15.8.3 创建根与干
    若编译和运行PerfectTime.java,即使rmiregistry正确运行,它也无法工作。这是由于RMI的框架尚未就位。首先必须创建根和干,以便提供网络连接操作,并使我们将远程对象伪装成自己机器内的某个本地对象。
    所有这些幕后的工作都是相当复杂的。我们从远程对象传入、传出的任何对象都必须“implement Serializable”(如果想传递远程引用,而非整个对象,对象的参数就可以“implement Remote”)。因此可以想象,当根和干通过网络“汇集”所有参数并返回结果的时候,会自动进行序列化以及数据的重新装配。幸运的是,我们根本没必要了解这些方面的任何细节,但根和干却是必须创建的。一个简单的过程如下:在编译好的代码中调用rmic,它会创建必需的一些文件。所以唯一要做的事情就是为编译过程新添一个步骤。
    然而,rmic工具与特定的包和类路径有很大的关联。PerfectTime.java位于包c15.Ptime中,即使我们调用与PerfectTime.class同一目录内的rmic,rmic都无法找到文件。这是由于它搜索的是类路径。因此,我们必须同时指定类路径,就象下面这样:
    rmic c15.PTime.PerfectTime
    执行这个命令时,并不一定非要在包含了PerfectTime.class的目录中,但结果会置于当前目录。
    若rmic成功运行,目录里就会多出两个新类:
    PerfectTime_Stub.class
    PerfectTime_Skel.class
    它们分别对应根(Stub)和干(Skeleton)。现在,我们已准备好让服务器与客户互相沟通了。
      

  2.   

    我已经生成根与干了,我说过了,在本地可以运行的。 谢谢你的回答。 
    我不太清楚应该怎么设置那个路径,应该把 stub放在哪儿呢? 是不是应该放在一个公共的目录?例如 /usr/local/apache/htdocs/ 下? 我试过放那儿也是不行。 真是头大!
      

  3.   

    比喻:xxx_stub.class 包名是example.xxx_stub.class那么在htdocs下,当前目录有example建立一个目录example,把xxx_stub.class copy 到里面。
      

  4.   

    建议指定"java.rmi.server.codebase"(在服务器端), 再将根和干放到codebase所指的uri(通常采用http协议)中, 这样client就可以根据你所指定的codebase自动download所需的东西乐 :)