若編譯和運行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)。現在,我們已准備好讓服務器與客戶互相溝通了。