前面通過一個例子簡單的介紹了如何快速的開發(fā)一個osgi應(yīng)用。下面來具體說明一下什么是osgi,以及osgi 能做什么,為什么使用osgi,以及到底o(hù)sgi能帶來什么益處。
首先osgi是什么,osgi是由osgi alliance 制定的一個規(guī)范。由此規(guī)范,形成了osgi框架?;旧希琽sgi 也就是類似于servlet規(guī)范一樣,提供相應(yīng)的接口。而具體的實(shí)現(xiàn),由相應(yīng)的平臺實(shí)現(xiàn),如equinox平臺。
說了那么多,具體osgi能做什么呢?個人歸納了一下,包括以下幾點(diǎn):
1.提供更高層次的模塊管理,相對于java的包來說,osgi更加傾向于模塊管理。
2.提供更好的封裝性,使用更加嚴(yán)格的類裝載機(jī)制,讓模塊內(nèi)的封裝性變得更強(qiáng)。
3.真正的面向接口,面向服務(wù)編程,使模塊之間的耦合度大大降低。
4.支持熱部署,只要osgi內(nèi)核運(yùn)行著,其他模塊可以隨時更新,增加。
5.易擴(kuò)展,便于使用插件的模式進(jìn)行擴(kuò)展。具體看看eclipse的插件體系就知道了。
簡單介紹了一下osgi,下面說說osgi的幾個層次:
安全層:基于java2 安全機(jī)制,增加了相應(yīng)的限制和使用標(biāo)準(zhǔn)的java 許可。
模塊層;定義標(biāo)準(zhǔn)的java 模型
生命周期層:提供完整的bundles生命周期管理
服務(wù)層:提供動態(tài),簡潔和持久化編程模型。
相應(yīng)的實(shí)際服務(wù)接口。
主要來說說模塊層,看過前面的例子應(yīng)該知道,那個例子一共包括10個模塊(包括系統(tǒng)模塊)osgi 以bundle作為一個基本的模塊單元。bundle主要包括需要的基礎(chǔ)資源,包括類和其他資源文件;一個manifest文件,用于描述bundle信息,以及可選的osgi-opt目錄。
manifest文件是最重要的描述文件,如果缺失,則bundle也就無法裝載。
簡單解釋一下前面定義過的bundle manifest;bundle 文件包括幾個必須的元素:
Bundle-ManifestVersion: 2//定義了bundle遵循規(guī)范的規(guī)則,1表示r3規(guī)范 2表示r4和以后的版本
Manifest-Version: 1.0 //主要的版本號
//唯一的bundle名稱,相當(dāng)于在系統(tǒng)中的id。singleton表示是否使用單啟動方式
Bundle-SymbolicName: org.demo.helloworld;singleton:=true
//以下是可選的
Bundle-Name: Helloworld Plug-in//bundel 名稱
Bundle-Vendor: zsoft//發(fā)布商
Bundle-RequiredExecutionEnvironment: J2SE-1.5//需要的執(zhí)行環(huán)境
//下面是一些引用包的信息,包括包名稱和版本號,只有引用了這些包,才能讓classloader裝載。
Import-Package: javax.servlet;version="2.4.0",
javax.servlet.http;version="2.4.0",
org.apache.commons.logging;version="1.0.4",
org.osgi.framework;version="1.4.0"
//這是直接引用整個bundle,一般不提倡整個引用,這里是用來定義擴(kuò)展
Require-Bundle: org.eclipse.equinox.http.registry;bundle-version="1.0.100"
這里簡單的描述了一下主要的幾個bundle頭信息,如果需要詳細(xì)了解,具體參考相應(yīng)的規(guī)范。本篇的內(nèi)容就這些,下篇詳細(xì)講解一下osgi的類裝載機(jī)制,這也是初學(xué)者最頭疼的。
posted on 2009-02-14 16:28
布衣郎 閱讀(3448)
評論(1) 編輯 收藏 所屬分類:
eclipse