本來想寫OSGi再體驗,但發現沒描述OSGi主要在做什麼,講來也是有點一頭霧水,先舖陳我目前所瞭的OSGi。
OSGi全名是Open Service Gateway Initiative,目的在整合家庭異質網路。比如家裡有DVD光碟櫃,但一家人要去旅遊時在車上無聊,就在車上的影音設備播放家裡的DVD裡的影片。有別過往一個Server服務於不同的Client,OSGi是一種服務平台,如手機服務平台、家庭服務平台、汽車服務平台,上述的例子,即汽車上的OSGi連線到到家庭的OSGi取得DVD服務回傳到汽車屏幕上播放。
需求有了,再來就是OSGi的設計理念。這得區分OSGi的底層平台與OSGi的服務框架來講,而對開發者是OSGi Framework比較有感受。
OSGi的底層是為符合VHE(Virtual Home Environment虛擬家庭環境)標準,設計「協同服務」與「移動性服務」分別提供OSGi 服務平台共享服務與移動性的能力。
協同服務(Cooperation Service):
cowork
1.向汽車OSGi(本地端)請求DVD播放某影片。
2.汽車OSGi有該影片則回傳,若無則向家庭OSGi(遠端)請求該服務。
3.若家庭OSGi無此服務則結束,若有則家庭OSGi將該服註冊於汽車OSGi,由汽車OSGi回傳該DVD影片播放服務。
OSGi服務平台的傳遞是透過dynamic-stub 向dynamic-skeleton發出請求,來實現協同服務,請求部份則是靠XSOAP協定(走HTTP協定的RMI),至於如何得知對方OSGi的位置,則靠「移動性服務」。
 
移動性服務(Mobility Service):
Mobile IPv6 主要有三個元件:Mobile Node(MN即是行動裝置)、Home Agent(HA 即本地網路的代理主機)、Correspondent Node(CN 即與MN 連線的另一裝置),其中汽車OSGi就是MN,家庭OSGI是CN,HA則是安裝於家庭OSGi。因為MN會持續對HA做Binding,而MN變換了IP則HA會知情,HA會將CN服務結果轉換MN目前的IP傳給MN。過程是HA-CN是走TCP/IP,到了HA轉換成HTTP重新封包傳給MN。
 
所謂Service(服務)是處在OSGi Framework是什麼位置,則以下又是另一個篇章:
layer
Bundles:是一個jar檔,包含零到數個服務,可以Query有哪些服務。
Service:其實是Java的Interface,可以匯出或匯入,其實作由EE(Exceution Environment)提供
Life Cycle:管理Service,以及Module的載入(Install/uninstall)
Module:class load,達成動態載入。
layer2
由上圖可知Bundles是由OSGi Framework掌控,而Service和Module是由Bundles掌握生命週期。因此某Bundles不是在Acitive狀態(沒有被start),則無法註冊或取得Service(register, get)。
 
後續應會再對Bundles多加著墨。
arrow
arrow
    全站熱搜

    Jemmy 發表在 痞客邦 留言(0) 人氣()