天天看點

RMI應用的部署及類的動态加載

這是根據我上一篇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”,這是會另外彈出一個空視窗

RMI應用的部署及類的動态加載
RMI應用的部署及類的動态加載

(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檔案

如果成功,會彈出如下界面

RMI應用的部署及類的動态加載
RMI應用的部署及類的動态加載

(3)      在DOS下,轉到F:\test\client目錄下,運作指令:

java CalculatorClient

運作成功會出現如下結果

RMI應用的部署及類的動态加載
RMI應用的部署及類的動态加載

對于在兩台不同的機器上運作,首先你要保證作為伺服器和用戶端的兩台機器之間能夠ping通,其次在用戶端除了要儲存用戶端程式,還要儲存聲明遠端功能的接口對應的class檔案,在上述例子中,用戶端需要Calculator.class和CalculatorClient檔案,