在本期中,將更進一步地介紹 Jini系統的相關開發環境,并輔以一個簡單之實例作為說明。
之前提到藉由Jini 的技術,使我們可以輕易地結合任何服務(像是電子設備、應用程式等)到電腦網路上,并且很方便地使用它們。因此,在Jini 的世界中,主要有三種角色,分別是提供服務的service PRoviders、使用服務的clients、以及作為前兩個角色間之橋梁的service locators[4]。其關系如圖一所示。
其中service providers必須向 service locators 登記所提供的服務,而client可以向 service locators 查詢所 的服務資訊,并且藉以向 service providers 請求服務。因此 service locators 必須負責記錄許多可用的服務之資訊,以及幫忙clients 搜尋所 之服務。
以下將介紹如何利用Jini的package與相關平臺開發出隱含上述關系的應用系統。
二、開發平臺目前開發Jini系統的平臺之最新版本為1.0,其中包括 JiniTM System Software Starter Kit(Jini Starter Kit)、JiniTM Technology Core Platform Compatibility Kit (TCK)(測試環境)、JavaspacesTM Technology Kit ( JSTK)(利用Jini 實作出來的服務)三個套件 。
Jini Starter Kit 涵蓋所有開發Jini 系統所 之套件,有JiniTM Technology Core Platform(JCP)、 JiniTM Technology Extended Platform (JXP)、與JiniTM Software Kit(JSK )。其中JCP為Jini 的核心技術,包括 discovery、lookup 、lease等幾個 packages,放在 net.jini.core目錄里。JXP提供比JCP 更擴充之功能,包括discovery、 lookup、space等幾個packages,放在 net.jini目錄里。而JSK為用JCP實做出的lookup、 transaction服務與一些實用的類別, mahout、reggie等幾個packages,放在com.sun.jini目錄里。其中SUN公司將已經實作出的 JiniTM Transaction 稱做 "mahout",而實作出的JiniTM Lookup service稱做 "reggie"。
三、基礎架構首先要說明的是在 Jini中,呼叫遠端 methods的方式,通常是采用RMI的技術 。例如,當client 找到適當的service 時,client可能會使用service端的服務,也就是遠端呼叫(remote call),此時即可利用RMI 的技術來完成。(附注:當然,在 Jini中也可以選擇不透過RMI,而直接寫socket程式來完成遠端呼叫。只是若利用RMI時,撰寫程式會比較方便。)
我們已經知道 service provides 、clients與 service locators 之間的互動關系,接著就為您說明這三者間的實№運作情形,請參考圖二。
Service locator的目的在於紀錄與查詢可用的服務資訊,而這種功能稱做 "lookup service" ,因此其必須至少具備有lookup service的服務。此外,由於其底層網路通訊使用到了RMI 的機制,所以在 Service locator上還必須啟動RMI daemon與HTTP daemon。而 HTTP daemon是用來提供做遠程呼叫時,一種取得遠端資料(如 Server_stub等)的途徑。
由於我們是利用RMI 的機制提供服務讓遠端物件使用,所以Service provider所提供的 services必須繼續至Remote類別,才能使用RMI功能。另外必須建立 (instantiate)一個 LookupLocator物件與一個 ServiceRegistrar 物件,以便向 service locator注冊與使用其他服務。其中 LookupLocator物件是用來尋找特定的 service locator;而 ServiceRegistrar 物件則用來向 lookup service注冊本service所提供的服務[4]。具體步驟請參考圖三。
Client同樣也必須建立一個 LookupLocator物件與一個 ServiceRegistrar 物件。而 ServiceRegistrar 物件則被用來向 Service provider 取得所 之服務。其過程示意圖如圖四及圖五。
四、程式范例
接著就來介紹如何在Windows系統中實作一個簡單的Jini 應用程式(底層使用RMI機制)。此范例將顯示出如何啟動lookup locator 、如何將services 向lookup lcoator 注冊、如何收尋到特定的service、與如何使用遠端的 service。其步驟分述如下:
echo 啟動 HTTP daemon
start java -jar -classpath %JINI_CLASSPATH% JINIHOME%/lib/tools.jar
-port 8080 -dir %JINIHOME%/lib
echo 清掉前一次的 RMID log 與 Reggie's log echo Directory.
deltree log
deltree reggie_log
echo 啟動 RMI daemon
start rmid
echo 啟動 lookup service,并且指定其所屬的 group
echo為 "public".
新聞熱點
疑難解答