OSGi是一種松散耦合的組件和服務(wù)運(yùn)行平臺(tái)規(guī)范. 簡(jiǎn)單的說, 用戶只需要修改通用的Java類庫檔案JAR文件中的META-INF下的元數(shù)據(jù)文件MANIFEST.MF, 添加必要的標(biāo)簽信息, 放置到OSGi框架的Bundle Repository中, 用戶的類庫就成了OSGi環(huán)境的一部分.
成為OSGi環(huán)境的組件, 為其他標(biāo)準(zhǔn)的OSGi組件提供代碼功能是最為直接的一種功能. 用戶也可以將提供組件中的某種功能的接口和實(shí)現(xiàn)實(shí)例發(fā)布到OSGi服務(wù)注冊(cè)表中, 供其他組件直接查找使用. 這就是OSGi的Serivce概念. 同樣, 用戶可以查找OSGi環(huán)境中其他組件提供的接口服務(wù), 調(diào)用改服務(wù)完成必要的處理.
OSGi組件提供的服務(wù)具有兩種層面的含義: 系統(tǒng)層面, 即一個(gè)組件為其他組件提供服務(wù), 這些服務(wù)體現(xiàn)為Java接口的實(shí)現(xiàn); 業(yè)務(wù)層面, 即一個(gè)組件為外部系統(tǒng)或用戶提供某種業(yè)務(wù)服務(wù)實(shí)現(xiàn).
OSGi的組成.
OSGi框架由4層組成:運(yùn)行環(huán)境、模塊、生命周期管理、服務(wù)注冊(cè).
運(yùn)行環(huán)境是指標(biāo)準(zhǔn)的java環(huán)境. 只要具備了java2的構(gòu)造和輪廓的都是被認(rèn)可的運(yùn)行環(huán)境.
模塊層定義了采用的ClassLoader機(jī)制.
生命周期管理層則為bundle的安裝、啟動(dòng)、停止、更新和卸載提供了支持.
服務(wù)注冊(cè)為Bundles提供了一個(gè)動(dòng)態(tài)的協(xié)作模型. 本來Bundles可通過傳統(tǒng)的class共享方式來實(shí)現(xiàn)協(xié)作, 但在動(dòng)態(tài)的安裝和卸載代碼的環(huán)境下這種方法是不適用的. 服務(wù)注冊(cè)為Bundles間共享Objects提供了一種可用的模型, OSGI提供了一堆的事件來通知服務(wù)的使用者關(guān)于服務(wù)的注冊(cè)和卸載, 服務(wù)其實(shí)就是簡(jiǎn)單的Java objects.