這是根據我上一篇Java RMI執行個體的代碼進行的配置(http://blog.csdn.net/error/404.html?from=http%3a%2f%2fblog.csdn.net%2fzlp1992%2farticle%2fdetails%2f40455405)
遠端對象一般分布在伺服器端,當用戶端試圖調用遠端對象的方法時,如果在用戶端還不存在遠端對象所依賴的類檔案,如遠端方法的參數和傳回值對應的類檔案,用戶端會從java.rmi.server.codebase系統屬性指定的位置動态加載該類檔案。當伺服器端通路用戶端的遠端對象時也一樣。
RMI架構的動态加載類的機制:被動态加載的類的檔案都集中放在網絡的同一個地方,如果類被修改,隻要更新這個地方的類檔案就行了。
以前一個例子的檔案來測試:
我們将前面的例子中的class檔案如下放置
F:\test\client\ : Calculator.class CalculatorClient.class
client目錄:這個目錄被釋出到客戶程序所在的主機上
F:\test\server\ : Calculator.class CalculatorImpl.class CalculatorServer.class
server 目錄:放置了運作伺服器程式所有的類檔案,如果使用JDK1.4或者更低的版本,還要把存根類(CalculatorImpl_Stub.class)的檔案也放到該目錄下。這個目錄被釋出到伺服器程序所在的主機上。
F:\test\download\ : Calculator.class
download 目錄:用于動态加載類的目錄。java.rmi.server.codebase系統屬性就指向這個目錄。客戶程式、伺服器程式及RMI系統資料庫都會從這個目錄下動态加載有關類檔案。Download目錄可以釋出到伺服器程式所在的主機上,或者網絡的其他主機,隻要讓java.rmi.server.codebase系統屬性指向它就行。
下面首先在同一台主機運作本程式
(1) 在DOS,運作指令“start rmiregistry”,這是會另外彈出一個空視窗
(2) 在DOS下,轉到F:\test\server目錄下,運作指令:
start java –Djava.rmi.server.codebase=file:///F:\test\download\ CalculatorServer
注意空格,“-D”選項把java.rmi.server.codebase系統屬性設為一個本地檔案系統的目錄“file:///F:\test\download\”,檔案路徑必須以“\”結束。如果是放在網絡上,則可以這樣指定:
-Djava.rmi.server.codebase=http://www.xxx.xx/download/ ,在該download目錄下放置要動态加載的class檔案
如果成功,會彈出如下界面
(3) 在DOS下,轉到F:\test\client目錄下,運作指令:
java CalculatorClient
運作成功會出現如下結果
對于在兩台不同的機器上運作,首先你要保證作為伺服器和用戶端的兩台機器之間能夠ping通,其次在用戶端除了要儲存用戶端程式,還要儲存聲明遠端功能的接口對應的class檔案,在上述例子中,用戶端需要Calculator.class和CalculatorClient檔案,