RMI 遠(yuǎn)程對(duì)象的激活_第1頁(yè)
RMI 遠(yuǎn)程對(duì)象的激活_第2頁(yè)
RMI 遠(yuǎn)程對(duì)象的激活_第3頁(yè)
RMI 遠(yuǎn)程對(duì)象的激活_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、本文由【中文word文檔庫(kù)】 搜集整理。中文word文檔庫(kù)免費(fèi)提供海量教學(xué)資料、行業(yè)資料、范文模板、應(yīng)用文書(shū)、考試學(xué)習(xí)和社會(huì)經(jīng)濟(jì)等word文檔RMI 遠(yuǎn)程對(duì)象激活張福勇1 吳秋霞2(1. 昆明理工大學(xué)信息工程與自動(dòng)化學(xué)院,云南,昆明650051; 2. 五邑大學(xué)信息學(xué)院,廣東,江門529020)摘 要:介紹了RMI中為何要引入遠(yuǎn)程對(duì)象激活,然后具體介紹RMI中實(shí)現(xiàn)遠(yuǎn)程激活的方式。RMI通過(guò)遠(yuǎn)程對(duì)象的激活機(jī)制實(shí)現(xiàn)了遠(yuǎn)程對(duì)象中有用的信息的長(zhǎng)時(shí)間保留, 這樣既節(jié)省了資源又實(shí)現(xiàn)了遠(yuǎn)程對(duì)象的調(diào)用。關(guān)鍵詞: 分布式 RMI 遠(yuǎn)程對(duì)象激活 引言分布式對(duì)象系統(tǒng)被設(shè)計(jì)為支持長(zhǎng)期存在的持久對(duì)象。假設(shè)這些系統(tǒng)將由成

2、千(也許成萬(wàn))個(gè)這樣的對(duì)象組成,則對(duì)象的實(shí)現(xiàn)在無(wú)限期的時(shí)間段內(nèi)被激活并保持活動(dòng)狀態(tài)是不合理的。這將占用寶貴的系統(tǒng)資源。另外,客戶機(jī)需要保存對(duì)對(duì)象的持久引用的能力,這樣在一個(gè)系統(tǒng)崩潰后可以重新建立對(duì)象之間的通訊,因?yàn)橥ǔ?duì)一個(gè)分布對(duì)象的引用只有當(dāng)對(duì)象處于活動(dòng)狀態(tài)時(shí)才有效。對(duì)象激活是一種用來(lái)提供對(duì)對(duì)象持久引用和管理對(duì)象實(shí)現(xiàn)的執(zhí)行的機(jī)制。在 RMI 中,激活允許對(duì)象根據(jù)需要開(kāi)始執(zhí)行。當(dāng)訪問(wèn)(通過(guò)方法調(diào)用)“可激活”遠(yuǎn)程對(duì)象時(shí),如果該遠(yuǎn)程對(duì)象當(dāng)前尚未執(zhí)行,則系統(tǒng)將在適當(dāng)?shù)?Java 虛擬機(jī)中開(kāi)始該對(duì)象的執(zhí)行。1惰性激活在 RMI 系統(tǒng)中使用了惰性激活。惰性激活就是將一個(gè)對(duì)象的激活延遲到客戶機(jī)第一次使用

3、該對(duì)象時(shí)(即第一次方法調(diào)用時(shí))。遠(yuǎn)程對(duì)象的惰性激活是用不完善遠(yuǎn)程引用(有時(shí)稱為不完善塊)實(shí)現(xiàn)的。對(duì)遠(yuǎn)程對(duì)象的不完善遠(yuǎn)程引用在第一次調(diào)用對(duì)象的方法時(shí),“完善”為活動(dòng)對(duì)象的引用。每個(gè)不完善引用均保持一個(gè)持久句柄(激活標(biāo)識(shí)符)和對(duì)目標(biāo)遠(yuǎn)程對(duì)象的瞬態(tài)遠(yuǎn)程引用。遠(yuǎn)程對(duì)象的激活標(biāo)識(shí)符包含足夠的信息來(lái)使第三方激活該對(duì)象。瞬態(tài)引用是對(duì)可用來(lái)聯(lián)系執(zhí)行對(duì)象的主動(dòng)遠(yuǎn)程對(duì)象的“活動(dòng)”引用。在不完善引用中,如果對(duì)遠(yuǎn)程對(duì)象的活引用為空,則不認(rèn)為目標(biāo)對(duì)象是主動(dòng)的。在方法調(diào)用中,不完善引用(對(duì)該對(duì)象)將加入激活協(xié)議以獲得“活”引用,該引用是對(duì)新激活的對(duì)象的遠(yuǎn)程引用(例如單路傳送 (unicast) 的遠(yuǎn)程引用)。一旦不完善引

4、用得到活引用,則不完善引用將把方法調(diào)用傳給底層的遠(yuǎn)程引用,而該遠(yuǎn)程引用又將方法調(diào)用傳給遠(yuǎn)程對(duì)象。具體的說(shuō),遠(yuǎn)程對(duì)象的 stub 包含一個(gè)“不完善”遠(yuǎn)程引用類型,該類型既包括:遠(yuǎn)程對(duì)象的激活標(biāo)識(shí)符,又包括“活”引用(可能為空),其中包含遠(yuǎn)程對(duì)象的“活動(dòng)”遠(yuǎn)程引用類型(例如,帶有單路傳送語(yǔ)義的遠(yuǎn)程引用類型)。 2 激活協(xié)議在遠(yuǎn)程方法調(diào)用期間,如果目標(biāo)對(duì)象的“活”(live) 引用是未知的,則不完善引用將使用激活協(xié)議。激活協(xié)議包括下列幾個(gè)實(shí)體:不完善引用、激活器、Java 虛擬機(jī)中的激活組和被激活的遠(yuǎn)程對(duì)象。激活器(通常每個(gè)主機(jī)有一個(gè))是一個(gè)實(shí)體,負(fù)責(zé)激活,它是:將激活標(biāo)識(shí)符映射到激活對(duì)象所需信息(

5、對(duì)象的類、位置 - URL 路徑 - 從該處可加載類、對(duì)象可能需要用于自舉 (bootstrap) 的特定數(shù)據(jù)等)的信息數(shù)據(jù)庫(kù),及Java 虛擬機(jī)的管理器,它啟動(dòng)虛擬機(jī)(必要時(shí))并將對(duì)象激活請(qǐng)求(和必要的信息一起)傳送到遠(yuǎn)程虛擬機(jī)中正確的激活組。 激活組(每個(gè) Java 虛擬機(jī)中一個(gè))是這樣的實(shí)體,它接收對(duì)激活 Java 虛擬機(jī)中對(duì)象的請(qǐng)求并將激活的對(duì)象返給激活器。激活協(xié)議如下所示。不完善引用使用一個(gè)激活標(biāo)識(shí)符并調(diào)用激活器(內(nèi)部 RMI 接口)來(lái)激活與該標(biāo)識(shí)符關(guān)聯(lián)的對(duì)象。激活器查找對(duì)象的激活描述符(先前已注冊(cè))。對(duì)象的描述符包括:· 對(duì)象的組標(biāo)識(shí)符(指定對(duì)象激活時(shí)所處的虛擬機(jī)), &

6、#183; 對(duì)象的類名, · URL 路徑,從該處加載對(duì)象的類代碼, · 特定于對(duì)象的已編組的初始化數(shù)據(jù)(例如,初始化數(shù)據(jù)可能是包含對(duì)象持久狀態(tài)的文件的名稱)。 如果應(yīng)容納該對(duì)象的激活組存在,則激活器將激活請(qǐng)求傳送到該組。如果激活組不存在,則激活器將啟動(dòng)虛擬機(jī)以執(zhí)行激活組,然后將激活請(qǐng)求傳送到該組。激活組將加載對(duì)象的類并用特定的構(gòu)造函數(shù)來(lái)實(shí)例化該對(duì)象。此構(gòu)造函數(shù)帶多個(gè)參數(shù),包括先前注冊(cè)的激活描述符。對(duì)象完成激活時(shí),激活組將把已編組對(duì)象引用傳回激活器,然后該激活器記錄激活標(biāo)識(shí)符和激活引用對(duì),并將活動(dòng)(活)引用返給不完善引用。隨后,不完善引用(在 stub 內(nèi))通過(guò)活動(dòng)引用將方

7、法調(diào)用直接傳給遠(yuǎn)程對(duì)象。3 “可激活”遠(yuǎn)程對(duì)象的實(shí)現(xiàn)模型為了使可通過(guò)激活標(biāo)識(shí)符訪問(wèn)的遠(yuǎn)程對(duì)象不受時(shí)間影響,開(kāi)發(fā)人員必須做到:· 為該遠(yuǎn)程對(duì)象注冊(cè)一個(gè)激活描述符 · 在對(duì)象的類中包含一個(gè)專用構(gòu)造函數(shù),當(dāng) RMI 系統(tǒng)激活可激活對(duì)象時(shí)將調(diào)用它。 可用以下幾種方法來(lái)注冊(cè)激活描述符 (ActivationDesc):· 調(diào)用類 Activatable 的靜態(tài) register 方法 · 用 Activatable 類的第一個(gè)或第二個(gè)構(gòu)造函數(shù)創(chuàng)建“可激活”對(duì)象 · 顯式地導(dǎo)出“可激活”對(duì)象。該過(guò)程可用 Activatable 的第一個(gè)或第二個(gè) expor

8、tObject 方法實(shí)現(xiàn),其參數(shù)為 ActivationDesc、Remote 對(duì)象的實(shí)現(xiàn)和端口號(hào)。 對(duì)于特定對(duì)象,只可用上述三種方法之一來(lái)注冊(cè)激活對(duì)象。31構(gòu)造可激活的遠(yuǎn)程對(duì)象 Activatable. inactive 方法的調(diào)用)時(shí)通知激活組。Activatable 構(gòu)造函數(shù)的第一種和第二種形式用于從指定的 port 注冊(cè)并導(dǎo)出可激活對(duì)象。最初構(gòu)造對(duì)象時(shí)應(yīng)使用該構(gòu)造函數(shù);該構(gòu)造函數(shù)的第三種形式將在重新激活對(duì)象時(shí)使用。Activatable 的具體子類必須在最初構(gòu)造期間調(diào)用第一種或第二種構(gòu)造函數(shù)以注冊(cè)并導(dǎo)出對(duì)象。 構(gòu)造函數(shù)首先用對(duì)象的類名創(chuàng)建一個(gè)激活描述符 (ActivationDesc)

9、、對(duì)象所提供的 codebase 和 data(其激活組為虛擬機(jī)的缺省激活組)。然后,構(gòu)造函數(shù)將向缺省的 ActivationSystem 注冊(cè)該描述符。最后,構(gòu)造函數(shù)在特定 port 上(如果 port 為零,則選擇匿名端口)將可激活對(duì)象導(dǎo)出到 RMI 運(yùn)行時(shí)中,并將該對(duì)象作為 activeObject 報(bào)告給本地 ActivationGroup。如果在注冊(cè)或?qū)С龅倪^(guò)程中出錯(cuò),則構(gòu)造函數(shù)拋出 RemoteException。注意,構(gòu)造函數(shù)也初始化它的 ActivationID(通過(guò)注冊(cè)獲得),因此接下來(lái)對(duì) protected 方法 getID 的調(diào)用將返回對(duì)象的激活標(biāo)識(shí)符。Activatab

10、le 構(gòu)造函數(shù)的第三種形式用于從指定的端口導(dǎo)出對(duì)象。當(dāng) Activatable 的具體子類被對(duì)象自己的“激活”構(gòu)造函數(shù)激活時(shí),必須調(diào)用第三種構(gòu)造函數(shù)。該“激活”構(gòu)造函數(shù)帶兩個(gè)參數(shù):· 對(duì)象的 ActivationID · 對(duì)象的初始化數(shù)據(jù),一個(gè) MarshalledObject 對(duì)象 該構(gòu)造函數(shù)只將可激活對(duì)象從特定 port(如果 port 為零,則選擇匿名端口)導(dǎo)出到 RMI 運(yùn)行時(shí)中,而并不通知 ActivationGroup 該對(duì)象已是活動(dòng)對(duì)象。因?yàn)檎?ActivationGroup 激活該對(duì)象的,因而它自然知道對(duì)象已處活動(dòng)狀態(tài)。4結(jié)論RMI通過(guò)遠(yuǎn)程對(duì)象的激活機(jī)制實(shí)現(xiàn)了遠(yuǎn)程對(duì)象中有用的信息的長(zhǎng)時(shí)間保留,而且還避免了在全部時(shí)間里運(yùn)行管理這些遠(yuǎn)程對(duì)象的服務(wù)器造成的潛在的資源浪費(fèi)。使服務(wù)器做到了在客戶需要它們的任何時(shí)候啟動(dòng)。這樣既節(jié)省了資源又實(shí)現(xiàn)了遠(yuǎn)程對(duì)象的調(diào)用。5參考文獻(xiàn)1 (英)George Coulouris Jean Dollimore Tim Kindberg 著。金培弘 譯。分布式系統(tǒng)概念與設(shè)計(jì)。北京:機(jī)械工業(yè)出版社2004年1月2 marko boger著。曹學(xué)軍譯。JAVA與分布式系統(tǒng)。北京:機(jī)械工業(yè)出版社

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論