讀Core Java 第五章

讀Core Java 第五章

一、分佈式對象

1、簡介
(1)客戶與服務器的角色
(2)遠程方法調用
(3)配置遠程方法調用
(4)遠程方法中的參數傳遞
(5)服務器對象激活
(6)Java IDL與CORBA
(7)遠程方法調用與SOAP

二、客戶與服務器的角色

1、概述
(1)目標:客戶端程序員以常規的方式進行方法調用,而無需操心數據在網絡上傳輸或者解析響應之類的問題,但是問題在於,提供服務的對象可能不在同一個虛擬機內,甚至可能不是Java語言實現的對象
(2)解決:在客戶端爲服務器對象安裝一個代理proxy,客戶調用此代理,進行常規方法的調用,而客戶端代理負責與服務器進行聯繫;在服務器端安裝第二個代理對象,該服務器代理與客戶端代理進行通信,並且它將用常規方式調用服務器對象上的方法
(3)圖示在這裏插入圖片描述
2、代理之間的通信技術
(1)RMI:Java的遠程方法調用技術,支持Java的分佈式對象之間的方法調用
(2)CORBA:通用對象請求代理架構,支持任何編程語言編寫的對象之間的方法調用,使用Internet Inter-ORB協議(IIOP)支持對象間的通信
(3)SOAP:簡單對象訪問協議,獨立於編程語言,不過SOAP使用基於XML的傳輸格式

三、遠程方法調用

1、術語
(1)客戶端對象:發起遠程調用的程序對象
(2)客戶/服務器的術語是對應於單次方法調用而言的

2、存根與參數編組
(1)代理對象:存根stub,存根位於客戶端機器上,而非服務器上
(2)存根將遠程方法所需的參數打包成一組字節,與硬件無關的編碼方式
(3)在RMI協議中,數字總是以大尾數法字節順序發送,對象則使用序列化機制進行編碼
(4)對參數編碼的過程稱爲參數編組parameter marshalling,將參數轉換成適合在虛擬機之間進行傳遞的格式
(5)客戶端的存根方法構造了一個信息塊,由
被使用的遠程對象的標識符,被調用的方法的描述,編組後的參數 組成
(6)服務器端,一個接收對象爲每個遠程方法調用執行以下動作

反編組參數
定位要調用的對象
調用所需的方法
捕獲返回值或該調用產生的異常,並對它編組
將返回值編組,打包送回客戶端存根

(7)流程圖示
在這裏插入圖片描述
3、接口
(1)客戶端代碼總是使用某個interface類型的對象變量來訪問遠程對象
(2)接口是抽象實體
(3)遠程對象會自動進行垃圾回收,就如本地對象一樣
(4)分佈式垃圾回收器採用引用計數機制,無法探測出只存在循環引用的對象,這種循環圈必須由程序員顯式地打破,否則這些遠程對象就不會被回收

4、動態類加載
(1)當一個遠程對象,作爲遠程方法地參數的參數或者返回值,傳遞給一個程序時,該程序必須擁有此遠程對象的類文件
(2)例:方法返回Product類型的結果,客戶程序需要Product.class才能通過編譯
(3)遠程會遇到安全問題,因此在RMI客戶端應用程序需要使用安全管理器security manager,這種安全機制可以保護存根代碼中的程序免受病毒攻擊

四、配置遠程方法調用

1、接口與實現
(1)遠程對象的所有接口都必須繼承Remote接口,位於java.rmi包中,接口中方法必須聲明拋出RemoteException異常
(2)服務器類通常繼承自RemoteServer類,位於java.rmi.server包中
(3)UnicastRemoteObject類繼承RemoteServer抽象類,是實體類
(4)UnicastRemoteObject對象駐留在服務器上,當有人請求服務時,必須存活且能夠通過TCP/IP協議訪問到它

2、存根類的生成
(1)JDK5.0後,使用代理機制,所有的存根類都可自動生成
(2)JDK5.0之前,必須使用rmic工具親自創建存根
(3)在運行rmic之前,必須使用javac編譯源文件
(4)如果要爲包中的一個類生成存根,必須給出rmic完整的包名

3、定位服務器對象
(1)第一個服務器對象總要通過某種方式進行定位,Sun的RMI類庫提供了自舉註冊服務bootstrap registry service來定位第一個服務器對象
(2)服務器程序使用自舉註冊服務來註冊對象,然後客戶端就可以獲取這些對象的存根,通過自舉註冊服務提供一個對象的引用和一個名字,就可以註冊一個服務器對象
(3)RMI的URL以rml://開頭,後面接服務器以及一個可選的端口號,後面是一個斜線,接着就是遠程對象的名字
(4)基於安全原因,一個應用只有當它與註冊表運行在同一個服務器時,纔可以綁定、取消綁定,或者重綁定註冊對象的引用

4、客戶端
(1)使用RMI的客戶端程序應該安裝一個安全管理器,用以控制動態加載存根的行爲
(2)RMISecurityManager安全管理器,只要需要從另一個地方加載代碼就需要一個安全管理器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章