RMI(即Remote Method Invoke遠(yuǎn)程方法調(diào)用)涂邀。在Java中佃牛,只要一個類extends了java.rmi.Remote接口兆衅,即可成為存在于服務(wù)器端的遠(yuǎn)程對象渠旁,供客戶端訪問并提供一定的服務(wù)镀层。JavaDoc描述:Remote接口用于標(biāo)識其方法可以從非本地虛擬機上調(diào)用的接口镰禾。任何遠(yuǎn)程對象都必須直接或間接實現(xiàn)此接口。只有在“遠(yuǎn)程接口”(擴展java.rmi.Remote的接口)中指定的這些方法才可遠(yuǎn)程使用唱逢。
注意:extends了Remote接口的類或者其他接口中的方法若是聲明拋出了RemoteException異常吴侦,則表明該方法可被客戶端遠(yuǎn)程訪問調(diào)用。
同時坞古,遠(yuǎn)程對象必須實現(xiàn)java.rmi.server.UniCastRemoteObject類备韧,這樣才能保證客戶端訪問獲得遠(yuǎn)程對象時,該遠(yuǎn)程對象將會把自身的一個拷貝以Socket的形式傳輸給客戶端痪枫,此時客戶端所獲得的這個拷貝稱為“存根”织堂,而服務(wù)器端本身已存在的遠(yuǎn)程對象則稱之為“骨架”。其實此時的存根是客戶端的一個代理听怕,用于與服務(wù)器端的通信捧挺,而骨架也可認(rèn)為是服務(wù)器端的一個代理,用于接收客戶端的請求之后調(diào)用遠(yuǎn)程方法來響應(yīng)客戶端的請求尿瞭。
RMI框架的基本原理大概如下圖闽烙,應(yīng)用了代理模式來封裝了本地存根與真實的遠(yuǎn)程對象進行通信的細(xì)節(jié)。