程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Jini技術基礎結構

Jini技術基礎結構

編輯:關於JAVA

Jini技術的即插即用的基礎結構主要由三組協議組成:查找(Lookup)、發現(Discovery)和加入(Join)。查找服務是分布式Jini系統的基本組成部分,提供了在分布式Jini系統中服務的中央注冊機制。在Jini系統中,程序找到服務的首選方法是通過查找服務,而且查找服務也是提供給管理員和用戶各種訪問接口的基礎。

查找服務的服務模型

查找服務保存了一個服務的表,表中的每個元素代表了系統中可用的一項服務,其中保存了訪問這項服務所需要的代碼和一系列可擴充的描述服務的屬性。打個比方,查找服務就像電話簿,Jini系統中的服務就像電話簿中的用戶,查找服務中保存的信息就是用戶的電話號碼。也就是說,凡是需要訪問Jini系統中的服務,就必須知道查找服務中保存的“電話號碼”。但是查找服務有不少超過電話簿的優點,例如:查找服務保存的是一個動態的“電話簿”,而且,系統中的服務可以在“電話簿”中主動加入和去掉自己的“電話號碼”,而查找服務也完全支持這種機制。而在以後的內容裡,我們會發現更多的不同點。

當服務在查找服務中注冊後,會產生一個通知事件。系統管理員可以利用查找服務中的事件回調機制來收到這個通知。這就有利於系統管理員管理和維護系統。而且服務也會提供設置自身的用戶界面,這個用戶界面可以作為服務的屬性保存到查找服務中。管理員能輕松地設置服務,不用忙著到處找各種各樣的驅動程序和管理軟件。

在服務的有效期內,如果服務遇到問題需要引起管理員的注意,例如打印服務發現紙張短缺服務就增加一個屬性來指明問題。更改後的結果會保存到查找服務中。這時,同上所述,管理員利用查找服務的事件回調機制來收到上述問題的通知。有了這個有力的機制,大大減輕了系統管理員的負擔。

發現協議和加入協議

網絡中的服務在啟動後,怎樣加入到分布式Jini系統中,成為Jini系統中的服務,有兩個重要的必不可少的步驟。第一步肯定是找到系統中的查找服務,這個過程就是Discovery過程,用到的協議就是發現協議。第二步就是把自己注冊到查找服務中,這個過程是Join過程,描述這個過程的協議就是Join協議。一項服務在完成了這兩步後,就真正成為了Jini系統中的一位成員。為了准確地描述這兩個協議,先介紹一下用到的術語。

主機。擁有一或多個Java虛擬機並且能加入網絡的一個硬件設備被稱為主機組。一組Jini服務所組成的集合。組的名字是任意的字符串,用來描述該組的性質。

Discovery實體。Discovery實體就是處於同一主機內,將要開始,或者正處在找到查找服務的過程中一個或多個相互協作的Java語言中的對象的集合。

Join實體。Join實體就是處於同一主機內,已經獲得了查找服務,處於從查找服務中查詢服務或者將自己注冊到Jini系統內過程中的一個或多個相互協作的Java語言中的對象的集合。在以後的文章中,為了方便描述,將Discovery實體和Join實體統稱為實體。

Jini系統中的服務包括的范圍很廣,包括各種純軟件的服務和硬件設備的服務。如果一台主機希望加入Jini系統,成為Jini系統中的一項服務,需要具備以下幾個條件:首先需要一個能夠運行Jini代碼的Java虛擬機;其次需要一個正確配置的網絡協議棧。這個網絡協議棧隨著網絡協議的不同而改變。這裡假定采用的網絡層的協議是IP協議,此時以下幾個條件是必不可少的:IP地址(IP地址或者是靜態IP地址,或者是由主機利用DHCP協議來取得的動態IP地址);支持TCP協議和UDP多點傳送協議(在Discovery過程中會用到這兩種協議)。舉個例子,一台聯網的、安裝了JDK(Java開發工具包)的個人電腦就是一台主機。

每個查找服務都有相關聯的組,這樣可以使Jini系統中的服務結構更有層次感。例如:一個特定的查找服務可以屬於打印設備組,任何打印服務都可以注冊到該查找服務中。當然,組都是預定義的。在Discovery的過程中,Discovery實體確定自己感興趣的組,也就是自己希望加入的組,如果找到的查找服務也屬於這樣的組,Discovery實體就加入到這個查找服務中。這就避免了查找服務的結構過於龐大,把組織系統中服務的責任分攤給系統中多個不同的查找服務。目前,組的命名還沒有一個明確的規范,Sun公司只是希望組的名字最好符合網絡域名的命名規范,但是目前並沒有給出如何定義組的名字的詳細規范。我們相信在未來的發展過程中,隨著對Jini系統中服務的組織結構層次性要求的提高,這種命名規范會隨之完善起來的。

1.發現

在Discovery實體和查找服務交互過程中用到的協議一共有三個,分別是:多點傳送請求協議(multicast request protocol)、多點傳送宣布協議(multicast announcement protocol)和單點傳送發現協議(unicast Discovery protocol)。這裡首先對這三個協議進行簡單的介紹。

多點傳送請求協議。Discovery實體使用該協議以發現Jini系統中存在的查找服務。這個協議可用於設計浏覽Jini系統中的服務的浏覽器。

多點傳送宣布協議。查找服務在啟動後或者在網絡崩潰的恢復過程中,利用該協議在系統中發布自己存在的數據報。

單點傳送發現協議。當Discovery實體和查找服務中有一個知道了另一個的網絡地址和端口號時,就采用該協議來主動建立兩者之間點到點的通訊。

在Discovery的過程中,Discovery實體和查找服務的聯系是建立在socket層上的。兩者既是客戶方,也是服務方。在通訊的過程中,分為兩個階段。

第一個階段:Discovery實體和查找服務各自都建立了一個單點傳送服務的服務器,可以理解為普通的Internet服務器,例如FTP協議中的FTP服務器,目的就是讓Discovery實體和查找服務能夠建立與對方的點到點的連接。現在面臨的問題是:如何讓雙方知道對方的服務器地址?在第二個階段的描述中會找到這個問題的答案。

第二個階段:此時Discovery實體和查找服務都不知道對方的網絡地址,但是根據Jini系統的要求,雙方在網絡層加入了特定的多點傳送的組(這個組不是Jini系統中的組的概念,而是指網絡協議中的組),而且雙方都知道對方加入的網絡組的組地址。由於網絡協議支持向網絡組中所有機器同時發送UDP數據包,利用這個特性,雙方都向對方所屬的組發送數據包。Discovery實體發送數據包的過程稱為多點傳送請求,在查找服務中發送數據包的過程稱為多點傳送廣播宣布。在兩者發送的數據包中都保存了各自的地址和其它必要信息。同時,雙方都建立了一個收聽發向本組的UDP數據包的服務器。Discovery實體所建立的服務器的服務稱為多點傳送廣播收聽服務,在查找服務中建立的服務器的服務稱為多點傳送廣播請求服務。服務器把收到的數據包進行解碼,就可以知道客戶方的地址。在這個階段中用到的協議就是多點傳送請求協議和多點傳送宣布協議。這時,Discovery過程就進入了第三個階段。

第三個階段:此時Discovery實體和查找服務中有一個已經知道另一個的網絡地址。這時雙方就利用unicast 發現協議來進行通訊。協議的步驟如下:

第一步: 這一步有兩個對等的過程。當查找服務的單點傳送服務器收到Discovery實體的連接請求後,就建立了與Discovery實體的連接;或者是Discovery的單點傳送服務器收到查找服務的連接請求,建立與查找服務的連接。兩者之中那一個首先發起連接是等價的。雙方都創建了一個線程來負責創建與對方服務器的連接。

第二步:當Discovery實體和查找服務建立連接後,由Discovery實體主動發送一個特定Discovery請求後,查找服務就把以後所需要用到的Java語言中的對象(幫助Discovery實體加入到查找服務中的對象)傳給Discovery實體。

有時已經發現並加入系統的實體會再次使用發現協議。例如,一個實體需要確定特定的查找服務是否還在運行,或者關心是否有新的服務進入,以及其他諸如此類的問題。這時就會再次使用發現協議。

在Discovery實體的Discovery過程中,這三個發現協議互相協作。當實體啟動的時候,使用多點傳送請求協議來找到附近的查找服務;為了避免加重網絡的負擔,在經過一段時間後實體就會停止使用該協議,轉變為利用多點傳送宣布協議來收聽查找服務的廣播。在具體的實現中,這三個協議都是作為獨立的線程來實現的,由Discovery實體來負責協調這三個線程的運行。

2.加入

Join協議向已經找到查找服務的服務提供了一系列應該遵循的標准步驟。當服務遵循這些步驟後就可以在查找服務中注冊以加入Jini系統。值得注意的是,加入並不意味著簡單的注冊,而維持系統正確運行是加入的核心內容。

由於Jini系統是一個分布式系統,為了使系統在各種情況下正常運行,設計者對網絡系統崩潰後系統的恢復和系統持久運行的能力特別重視。所以在實現時,Jini系統中的服務都保存了必須保存的永久狀態信息。這些信息如下:

1)表示服務在Jini系統中的標識符。服務在不同的查找服務中注冊的服務標識符是唯一的。

2)服務具備的屬性。這些屬性是Java語言中的對象。服務的屬性描述了服務的狀態。如果服務的狀態改變了,那就必須修改屬性以適應這個改變。為了保證Jini系統中狀態的一致性,服務保存更改後的屬性後,必須在每個已經注冊的查找服務中做同樣的更改。

3)一套服務想要加入的組的集合。

4)必須注冊的特定的查找服務。對於這些查找服務,服務必須注冊到該查找服務中,而不論查找服務所屬的組是否服務希望加入的組。

每個服務都維持了一份它所注冊過的查找服務的表和一份租約表。當服務在特定的查找服務中注冊後,會得到一份租約,服務會分別把租約和這個查找服務加入到上述的表中。服務對租約定期續借來保證注冊的有效性。如果服務需要退出特定的查找服務,服務就會取消和這個查找服務相關聯的所有租約。由於租約機制的引入,使得不會出現系統資源不可回收的現象,增強了系統的魯棒性。

每一個Jini設備通過實現Dicovery和Join協議,就可以隨時隨地加入或退出Jini系統,從而達到即插即用的效果。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved