Jini技術的出現,使得Java在成功地為網絡設備的計算提供了合適的平台之後,更為網絡設備,尤其是家庭網絡下的消費類電子設備提供了一個全新的網絡計算結構,從而實現了人們期待已久的網絡設備的即插即用。
對Jini設備的硬件要求
雖然Jini本身是一個軟件系統,但是一個真正投入使用的Jini系統則由一系列軟件和相應的硬件組成。顯然,以往一般的電子設備是不可能直接加入到Jini系統中來的。我們只有全面了解支持Jini技術的硬件規范,才會對Jini技術的未來有一個更深入的了解。
Jini結構需要以Java語言中的數據類型定義服務,且以服務的不同實例來以不同方法實現該數據類型。一個服務可以是不同類型的成員,允許了一個服務實例可以為客戶提供不同功能。這是一個標准的面向對象軟件的方法。Jini系統分布式的特點允許了Java語言的數據類型可以以一個軟件和硬件的結構來唯一地實現。
實現這種功能的思想核心十分簡單。服務以一個接口定義,支持接口的代理對服務客戶是可見的,代理的功能模塊由服務提供者上載到查找服務上,隨後以客戶所發現的服務的一部分被下載到客戶方。這種服務相關的功能模塊需要用Java語言編寫以保證可移植性。但是,既然這代碼來自被使用服務的個體實例,它的代理就可以詳細地知道特定服務功能模塊的細節。下載的代碼不但知道實現這種服務的軟件,還可知道服務所在的硬件。在極端情況下,硬件就是服務的全部,下載的軟件是一個網絡級的設備驅動程序,在得到來自客戶方的Java語言的方法調用後,在網絡連線的另一端產生了對硬件的特定硬件代碼調用。
對查找服務(Lookup Service)的要求
一個服務提供的實際功能對提供這個功能的實體要求很少,實際上,Jini軟件服務可以用這樣一種方式來運行設備:客戶方下載的Jini程序直接向硬件發送相應的二進制代碼直接執行。在這種情況下,Jini設備所需的智能是最少的。Java程序與設備控制器交互的方式與設備在一局部計算機總路線下的交互是十分類似的(當然,還須在通信方面對網絡中心做一些修改)。
但是,提供服務僅是對Jini服務要求的一部分。要成為Jini系統的一個部件,服務還必須參加到Jini的發現協議中來,並向Jini查找服務注冊其自身信息。
這兩方面的需要是密切聯系的。Jini發現協議的主要目標是使得設備、服務或獲得本地Jini查找服務的一Jini遠程方法調用(RMI)的引用。一旦這個引用被得到,服務需在Jini查找服務中注冊,允許Jini系統中的其它成員發現和使用這個服務。
Jini查找服務的接口是一個完全的RMI接口,服務的實現使用了RMI所有的機制,包括分布的垃圾回收和代碼的動態下載。因此,服務被假定有一個對Jini查找服務的引用,該查找服務運行在一個完全的或是至少支持RMI的Java虛擬機之上。
當我們考慮到Jini查找服務的另一個實現方案,即除Jini查找服務自已定義的接口之外還支持其它遠程接口,(net.jini.core.lookup.ServiceRegistrar)因為這種方案有一個不同的RMI代理而不是像現在的方案那樣:一個有完全JVM和RMI的設備可以下載它。一個沒有完全JVM和RMI的設備需要一個處理這種服務實現的不同方法。
除此之外,服務的注冊還需要net.jini.core.lookup.ServiceItem對象的產生,這個對象由一系列的Jini對象組成。在查找服務包含這些入口則需要net.jini.core.entry.Entry的Jini對象的產生,所有這些對象最簡單的產生方式就是由一JVM構造。
最後,Jini查找服務的注冊被租用,返回的租用需要續租以使服務繼續在查找服務中顯示。查找服務規范沒有包括由注冊返回的租用對象。所有這些被定義成Jini語言中的接口,必須被以租用返回的(本地)對象支持。因而查找服務的設計需要那些類代碼下載到注冊的服務中以使租用可以被續租,實現了net.jini.core.lease的租用接口。
實現Jini服務的三種不同途徑
設備擁有常駐的JVM
成為Jini系統聯邦一部分的一個明顯的設計方案就是讓其包含計算能力、內存和穩定的存儲空間,這些是擁有一完全的JVM以及支持Jini基礎結構所需的Java應用環境的那些部分所需的(尤其是那些部分包括代碼載入、RMI和任何所需安全機制)。這將使設備進入專門的計算入口,設備的一部分將專門為Jini結構所需的部分Java API服務。在這種途徑下,硬件抽象實現在了一設備局部軟件抽象之後,該軟件抽象了在客戶與服務連接的的代理代碼之後。
這樣的設備可以對Jini和Java技術有完全的支持,包括上載與設備通信的的代碼和下載可能為設備提供服務所需的代碼。這樣的設備在網絡通信上使用本機RMI協議,並在通信協議和特定的控制設備自己運行的軟件協議之間有一個寬松的聯系。用這種途徑,設備成為一通過嵌入式Jini平台提供特定服務(或服務集)的專門網絡應用。
實際上,這種途徑以RMI服務器的實現使用了硬件解決方案,在兩個方向上隔離了硬件:先上載到Jini查找服務後下載到服務客戶的本地代理代碼來提供;在服務設備上的本地JVM和由Jini程序寫的代碼允許客戶代理和硬件自身的調解。
通過設備上的JVM中介,一個使用這種途徑的設備可以簡單地在設備上實現多種服務。這樣的設備可以在對客戶和客戶與服務之間的網絡協議無影響的情況下自身發展。盡管簡單、靈活,這種途徑會增加設備的成本。設備需要一可運行JVM的微處理器,產生存儲類所需的內存和一些存儲JVM和JDK軟件類的常駐存儲(如磁盤或NVRAM)。所有這些都加到了那些執行設備提供的Jini服務所需的硬件之上。
滿足這些需要不要調用JVM的主機版本,或一個在設備上運行的完全的JDK。JVM可以在任何形式的微內核或設備的硬件上直接運行。並且JDK的大部分不為一設備所需要,占用當前版本JDK相當大部分的如圖形和UI(User Interface)類不被需要。版本的其它部分同樣可拋棄,“被剝皮”的JDK足以滿足Jini設備的需要。確定這樣一個JDK子集的大小和部件是值得一做的;這與EmbeddedJava技術加上額外的RMI類的規模類似。
對於這種途徑來說,重要的是可以下載用Java語言寫的任何代碼,並可以使用RMI通信系統和處理一個虛擬機一般的需要。通過一標准JVM,設備在Jini系統聯邦中有一完全的成員資格,且在它提供給聯邦的其它成員的代理與它自身通信方式上有足夠的彈性。
使用專門JVM的設備
假如制造商願意放棄Jini分布式結構提供的某些靈活性,我們可以降低對其進入(Jini設備生產)的要求。為此,設備生產商需在設備中實現對Jini發現與查找服務的接口,包括對某種租用專門的處理和對這種租用直接續租的能力,該租用由查找服務分發。並且設備還應有下載對服務有用代碼的能力。這是一專門的功能集,比整個JVM需要的少得多,可由小得多的代碼來實現。
這樣的設備將包括一Jini環境專門設計的JVM,允許訪問Jini發現和查找服務以及續租一特別順序的租用。它限制了這樣一個設備的靈活性,因為設備不可以變化軟件。對由查找服務分發的租用的專門認知也使得這樣的設備只能與專門的查找服務打交道。但是,這種服務功能上的欠缺可由簡化設備總體得以彌補。
多個設備共用一虛擬機(物理上的)
此種方法使用了一個完全的JVM,但通過一系列不同設備完成JVM的開銷(包括軟件和硬件)。通過這種方法,一系列的設備都使用一物理上共同的JVM作為設備和Jini系統之間的中間層。設備載入Java程序到局域虛擬機,允許局域虛擬機與設備交互,然後將局域JVM作為與Jini查找服務和Jini發現服務和Jini租用交互的代理。
除了設備使用的JVM是共享之外,這種方法與第一種途徑十分相似,它仍然是一個完全的JVM,允許代碼的下載和完全的Jini平台功能。然而,這和設備的實現最有可能是允許多個(或是不同的)物理設備被插入到一個完全的設備以獲得Jini應用環境的共享。
這樣的設備最適合被看成是一“Jini設備港”,用以提供動力、網絡連接和一運行JVM的處理器以及JDK的適當部分。用於提供某種Jini服務的物理設備被插入到設備港中並向港報告。它可用一適當的協議(允許設備生產商既生產基本設備又生產設備港)或其它某種工業標准,局部設備認證計劃。作為局部聲明的一個部件,允許設備既作為本地機器的設備又作為網絡級設備。
在發現新的本地設備以後,Jini設備港將向Jini查找服務注冊由新設備提供的服務(先為設備港所知)。設備港還有責任在Jini查找服務入口續租和發現任何作為代理的設備從網絡上的刪除。設備港用向Jini查找服務提供設備交給它的代碼,以使服務的客戶可下載。
設備服務的客戶將認為它是在與注冊在Jini查找服務的設備交互,但實際上它是與設備港交互。設備港可作為它所代理的特定設備的“發報機”(dispatcher),在由服務代理使用的網絡協議和設備港與實際設備的協議之間有一轉換協議。
在這種方式中,設備廠商成本的降低來自多設備共享一個設備“港”的能力,這個設備港有智能、內存或是其它組件(如電源)。通過在多個設備共享這些資源,與Jini系統聯邦交互所需的額外開銷可被眾多設備共同分擔。設備廠商所需做是實現設備與Jini設備港之間的協議,該協議存在於設備港中,必須提前定義並且不可隨時間改變。
應用實例:家庭網絡
家庭網絡(Home Net)是日益為人所知的新概念。用網絡把各種數字化的家用電器連接起來顯然是大有前途的。但是,如果家用電器是像目前的PC機一樣地上網,恐怕會因為不易安裝、使用等原因而不為普通家庭用戶所接受。然而,Jini的出現則為家庭網絡掃清了障礙。
當越來越多的家用電器內置了微處理器,對通用的控制與使用方法的需要也將日盜明顯。使用Jini技術的數字設備可存在於家庭方方面面,給予家庭用戶一個全新的家電使用概念。
Jini技術給予了使用者一個統一的、更方便地獲得他們的鄰居,甚至於整個世界所提供的服務的方法。用Jini軟件,一個膝上型電腦或是家用計算機可以加入到由其他電子設備共同組砀局域服務“共同體”中來。你只需“告訴”你自己的電腦你要做的事,由它們自動在“共同體”內尋找合適的資源服務完成實際的工作。
此外,實現Jini技術所需的代碼較少,各種家庭的應用都可以用上它,向自己家中加入高科技產品將就像插個插頭一樣簡單。