今天看了孫衛(wèi)琴<Java網(wǎng)絡(luò)編程精解>中的RMI部分,對(duì)RMI框架有了更進(jìn)一步的了解:

上一篇里Java RMI中,看的參考資料及JDK都比較老,而在JDK5.0以上的版本中,不需要用rmic命令來(lái)為遠(yuǎn)程對(duì)象生成靜態(tài)的存根類,RMI框架會(huì)在運(yùn)行時(shí)自動(dòng)為遠(yuǎn)程對(duì)象生成動(dòng)態(tài)代理類。

創(chuàng)建的遠(yuǎn)程接口必須符合以下條件:直接或間接繼承java.rmi.Remote接口,并且接口中的所有方法聲明都要拋出java.rmi.RemoteException;


創(chuàng)建的遠(yuǎn)程類必須符合以下條件:

a. 遠(yuǎn)程類的構(gòu)造方法必須聲明拋出RemoteException

b.所有的遠(yuǎn)程方法必須聲明拋出RemoteException

c.在遠(yuǎn)程類中可以定義一些本地方法,即不在遠(yuǎn)程接口中,這些本地方法無(wú)須拋出RemoteException,它們只能本地調(diào)用,但不允許被遠(yuǎn)程調(diào)用。

d.UnicastRemoteObject類覆蓋了Object類的equals(),hashcode(),clone()等方法。如果一個(gè)遠(yuǎn)程類繼承了其它類,無(wú)法繼承UnicastRemoteObject,則可以通過(guò)在構(gòu)造函數(shù)里調(diào)用UnicastRemoteObject.exportObject(this,0)方法,將自身導(dǎo)出為遠(yuǎn)程對(duì)象。


在遠(yuǎn)程方法中,只有基本類型的數(shù)據(jù),遠(yuǎn)程對(duì)象及可序列化的對(duì)象才可以作為參數(shù)或者返回值進(jìn)行傳遞。如果參數(shù)或返回值是一個(gè)遠(yuǎn)程對(duì)象,那么接收方得到的是遠(yuǎn)程對(duì)象的存根對(duì)象,若是可序列化對(duì)象,接收方得到的可序列化對(duì)象的復(fù)制品;若是基本類型的數(shù)據(jù),接收方得到的發(fā)送方的數(shù)據(jù)的復(fù)制品的對(duì)象。

另外還在安全管理器中主要包括兩個(gè)步驟:

a.創(chuàng)建一個(gè)安全策略文件。

b.為客戶程序設(shè)置安全策略文件和RMISecurityManager安全管理器。