今天看了孫衛琴<Java網絡編程精解>中的RMI部分,對RMI框架有了更進一步的了解:
上一篇里Java
RMI中,看的參考資料及JDK都比較老,而在JDK5.0以上的版本中,不需要用rmic命令來為遠程對象生成靜態的存根類,RMI框架會在運行時自動為遠程對象生成動態代理類。
創建的遠程接口必須符合以下條件:直接或間接繼承java.rmi.Remote接口,并且接口中的所有方法聲明都要拋出java.rmi.RemoteException;
創建的遠程類必須符合以下條件:
a. 遠程類的構造方法必須聲明拋出RemoteException
b.所有的遠程方法必須聲明拋出RemoteException
c.在遠程類中可以定義一些本地方法,即不在遠程接口中,這些本地方法無須拋出RemoteException,它們只能本地調用,但不允許被遠程調用。
d.UnicastRemoteObject類覆蓋了Object類的equals(),hashcode(),clone()等方法。如果一個遠程類繼承了其它類,無法繼承UnicastRemoteObject,則可以通過在構造函數里調用UnicastRemoteObject.exportObject(this,0)方法,將自身導出為遠程對象。
在遠程方法中,只有基本類型的數據,遠程對象及可序列化的對象才可以作為參數或者返回值進行傳遞。如果參數或返回值是一個遠程對象,那么接收方得到的是遠程對象的存根對象,若是可序列化對象,接收方得到的可序列化對象的復制品;若是基本類型的數據,接收方得到的發送方的數據的復制品的對象。
另外還在安全管理器中主要包括兩個步驟:
a.創建一個安全策略文件。
b.為客戶程序設置安全策略文件和RMISecurityManager安全管理器。