隨筆 - 59, 文章 - 4, 評(píng)論 - 184, 引用 - 7
          數(shù)據(jù)加載中……

          OSGi Technology

           

          Introduction

          OSGI規(guī)范為網(wǎng)絡(luò)服務(wù)定義了一個(gè)標(biāo)準(zhǔn)的、面向組件的計(jì)算環(huán)境。將OSGI服務(wù)平臺(tái)添加到一個(gè)網(wǎng)絡(luò)設(shè)備中,可以為其增加在網(wǎng)絡(luò)的任何地方管理組件的生命周期的能力。軟件組件可以從運(yùn)行中被安裝、升級(jí)或者移除而不需要中斷設(shè)備的操作。軟件組件可以動(dòng)態(tài)的發(fā)現(xiàn)和使用其他庫或者應(yīng)用程序。通過這個(gè)平臺(tái),軟件組件可以作為商品在柜臺(tái)中出售以及在家里開發(fā)。OSGI聯(lián)盟已經(jīng)開發(fā)出很多標(biāo)準(zhǔn)組件接口,從普通的功能如:HTTP serverconfiguration loggingsecurityuser administrationXML等等很多。一致的插件機(jī)制可以使這些組件滿足不同買主的不同需求。

          軟件組件架構(gòu)致力于一個(gè)軟件開發(fā)中越來越大的問題:大量的基礎(chǔ)配置需要開發(fā)和維護(hù)。標(biāo)準(zhǔn)化的OSGI組件架構(gòu)顯然可以簡化這個(gè)配置過程。

          The Framework

          OSGI規(guī)范的核心組件使OSGI框架。該框架為應(yīng)用程序(被成為bundles)提供一個(gè)標(biāo)準(zhǔn)化的環(huán)境。這個(gè)框架被分為以下幾個(gè)層次:

          ·  L0: 執(zhí)行環(huán)境

          ·  L1: 組件模塊

          ·  L2: 組件生命周期管理

          ·  L3: 服務(wù)注冊

          另外,還有一個(gè)安全機(jī)制深深的纏繞在所有的層中。

          framework  

          L0  L0:執(zhí)行環(huán)境就是java環(huán)境的規(guī)范。Java2配置和profiles,如j2seCDCMIDP等等都是可用的執(zhí)行環(huán)境。OSGI還標(biāo)準(zhǔn)化了一個(gè)基于基本profile的執(zhí)行環(huán)境和一個(gè)可用于OSGI bundles的最小執(zhí)行環(huán)境的規(guī)范。

          L1  L1:模塊層定義了類加載策略。OSGI框架是一個(gè)健壯而嚴(yán)格定義的類加載模型。它基于java但是更加模塊化。在java中,通常只有一個(gè)單獨(dú)的classpath包含所有的classresourceOSGI模塊層為一個(gè)模塊添加私有的類并控制模塊之間的關(guān)聯(lián)。

          L2  L2:生命周期層添加能夠動(dòng)態(tài)的安裝、啟動(dòng)、停止、升級(jí)和卸載的bundlesBundles加載class時(shí)依賴于模塊層,但也一個(gè)API在運(yùn)行期管理模塊。生命周期層引入了通常不屬于應(yīng)用一部分的動(dòng)態(tài)性。廣泛的依賴機(jī)制過去常用于確認(rèn)環(huán)境的當(dāng)前操作。

          L3  L3層添加了一個(gè)服務(wù)注冊器。服務(wù)注冊器為bundles提供了一個(gè)協(xié)作模塊用于動(dòng)態(tài)注冊。Bundles可以通過傳統(tǒng)的class共享來協(xié)作,但是class共享與動(dòng)態(tài)安裝和卸載的代碼不太協(xié)調(diào)。服務(wù)注冊器提供了一個(gè)全面的模塊似的bundles可以共享對(duì)象。一些事件被定義來處理服務(wù)的加載和卸載。服務(wù)只是一些能夠代表任何東西的java對(duì)象。很多服務(wù)的活動(dòng)一個(gè)HTTP服務(wù)器,其他服務(wù)代表了真實(shí)世界中的一個(gè)對(duì)象,比如:附近的一個(gè)藍(lán)牙電話

          安全是基于javajava2的安全模塊。語言的設(shè)計(jì)限制了許多可能的結(jié)構(gòu)。比如在病毒中常用的buffer溢出是不可能出現(xiàn)的。語言中的訪問控制限制了其他開發(fā)者對(duì)代碼的可見度。OSGI通過允許在標(biāo)準(zhǔn)的java中不可見的私有類來擴(kuò)展這個(gè)模型。Java2的安全模塊提供了一個(gè)全面的模型來檢查代碼對(duì)資源的訪問權(quán)限。OSGI也添加了全面的動(dòng)態(tài)權(quán)限管理。

          Standard Services

          在框架的上層,OSGI聯(lián)盟定義了很多servicesServices通過java接口定義。Bundles可以實(shí)現(xiàn)這些接口并注冊到service注冊器上。這些service的客戶端可以通過注冊器找到它們,或者當(dāng)它出現(xiàn)/消失時(shí)對(duì)它作出反應(yīng)。

          下面的章節(jié)描述了OSGi Release 3 services的概況。更多的信息可以在OSGi Release 3 servicesbookPDF中得到。注意每個(gè)service都被定義為抽象的,并且獨(dú)立于不同提供者的實(shí)現(xiàn)。

          Framework Services

          OSGI框架提供一個(gè)權(quán)限管理服務(wù),一個(gè)包管理服務(wù)和一個(gè)啟動(dòng)級(jí)別服務(wù)。這些服務(wù)是框架的一部分(可選)并指向操作的。

          框架服務(wù)如下:

          ?  Permission Admin:通過本服務(wù)現(xiàn)在或?qū)砟軌虿僮鞯?/SPAN>bundles。權(quán)限在它們被設(shè)置時(shí)即時(shí)生效。

          ?  Package Admin BundlesClassesresources共享包。Bundles的升級(jí)可能需要系統(tǒng)重新計(jì)算依賴關(guān)系。這個(gè)Package Admin服務(wù)提供實(shí)際包在系統(tǒng)中的共享情況的信息,并且能夠刷新已共享的包。I.e.打破依賴和重新計(jì)算依賴。

          ?  Start Level :啟動(dòng)級(jí)別是一組應(yīng)該一起運(yùn)行或在其他服務(wù)之前初始化的bundles。啟動(dòng)級(jí)別服務(wù)設(shè)置當(dāng)前啟動(dòng)級(jí)別,指定一個(gè)bundle的啟動(dòng)級(jí)別并且查看當(dāng)前設(shè)置。

          System Services

          系統(tǒng)服務(wù)提供每個(gè)實(shí)際系統(tǒng)所需要的底層功能。例如:Log Service, Configuration Admin Service, Device Access Service, User Admin Service, IO Connector ServicePreferences Service

          Log Service:記錄通過log service處理的information, warnings, debug 信息或者error。它獲得log實(shí)體然后分派這些消息實(shí)體到訂閱該消息的bundles

          Configuration Admin Service:該service提供一個(gè)靈活和動(dòng)態(tài)的模型來設(shè)置和訪問配置信息。

          Device Access Service:設(shè)備訪問是一個(gè)OSGI機(jī)制,當(dāng)有新的設(shè)備添加時(shí),它為新設(shè)備匹配驅(qū)動(dòng),并下載一個(gè)bundle來實(shí)現(xiàn)該驅(qū)動(dòng)。這對(duì)即插即用的情形非常有用。

          User Admin Service:這個(gè)服務(wù)使用一個(gè)用戶信息的數(shù)據(jù)庫(私有或共有)來達(dá)到授權(quán)和認(rèn)證的目的。

          IO Connector ServiceIO Connector Service實(shí)現(xiàn)CDC/ CLDC javax.microedition.io包作為一個(gè)service.這個(gè)service允許bundles實(shí)現(xiàn)新的、可選的協(xié)議。

          Preferences Service:這個(gè)service提供分層的屬性數(shù)據(jù)庫的訪問。類似于windows的注冊表或者java的屬性類。

          Protocol Services

          OSGI聯(lián)盟還定義了一組服務(wù),每個(gè)OSGI服務(wù)對(duì)應(yīng)一個(gè)外部協(xié)議:

          Http ServiceHttp service是一個(gè)servlet運(yùn)行環(huán)境。Bundles能夠提供可通過http協(xié)議訪問的servletsOSGI平臺(tái)的動(dòng)態(tài)更新工具使http service變成了一個(gè)非常吸引人的web server,因?yàn)樗梢赃h(yuǎn)程動(dòng)態(tài)更新servlet而不需要重啟

          UPnP Service:統(tǒng)一即插即用(UPnP)是一個(gè)對(duì)用戶電器暴露的統(tǒng)一接口。OSGI UPnP Service通過service注冊器對(duì)應(yīng)一個(gè)設(shè)備到一個(gè)UPnP網(wǎng)絡(luò)。可選的,它也能夠?qū)?yīng)一個(gè)OSGI service到一個(gè)UPnP網(wǎng)絡(luò)。這在release3規(guī)范中是被推薦的做法。

          Jini ServiceJini是一個(gè)網(wǎng)絡(luò)協(xié)議用來發(fā)現(xiàn)網(wǎng)上的Jini服務(wù)并從該服務(wù)器上下載這些服務(wù)的java代碼并執(zhí)行它們。這在release3規(guī)范中是被推薦的做法。

          Miscellaneous Services

          Wire Admin Service :通常bundles建立尋找它們想要與之合作的service的規(guī)則。然而,通常這應(yīng)該在部署時(shí)決定。Wire Admin service將一個(gè)配置文件中定義的不同service連接到一起。Wire Admin service使用生產(chǎn)者消費(fèi)者模式在service之間交換對(duì)象。

          XML Parser Service XML Parser service允許一個(gè)bundle通過指定的屬性定位一個(gè)解析器并同JAXP兼容。

          Conclusion

          OSGI規(guī)范有廣泛的適用性,是因?yàn)樗窃谝粋€(gè)單獨(dú)的JVM中的一個(gè)很小的層,并允許多樣的、基于java的、組件的高效合作。它提供一個(gè)可擴(kuò)展的安全機(jī)制以便組件可以運(yùn)行在一個(gè)受保護(hù)的環(huán)境。而且,通過適當(dāng)?shù)臋?quán)限,組件可以重用和合作,而不像其他java應(yīng)用環(huán)境。OSGI框架提供一個(gè)可擴(kuò)展排隊(duì)機(jī)制使得這種合作變得可能和安全。

          基于OSGI的中間件的存在為OSGI組件提供了廣闊的市場。OSGI平臺(tái)嚴(yán)格的定義似的組件能夠運(yùn)行在各種各樣的設(shè)備上,從手持設(shè)備到大型主機(jī)。

          采用OSGI規(guī)范還可以降低提供新業(yè)務(wù)的軟件開發(fā)成本。

          Further Reading

          OSGi Service Platform, Release 3 download or buy the book at reduced cost.

          OSGI聯(lián)盟撰寫了一個(gè)技術(shù)白皮書 和一個(gè)白板模式白皮書 來深入的解釋該項(xiàng)技術(shù)。

           

          posted on 2005-06-03 21:39 fisher 閱讀(2996) 評(píng)論(0)  編輯  收藏 所屬分類: Other

          主站蜘蛛池模板: 昌宁县| 西乌| 新民市| 平阴县| 湖南省| 台东市| 芮城县| 弋阳县| 彰武县| 广东省| 两当县| 察哈| 南平市| 阳春市| 泰和县| 双峰县| 汝南县| 临颍县| 朝阳县| 军事| 安康市| 吴川市| 奈曼旗| 嘉义县| 平利县| 来宾市| 宿迁市| 手游| 旺苍县| 泰宁县| 泸水县| 台山市| 阜平县| 郓城县| 汉阴县| 中宁县| 龙口市| 胶州市| 衡阳市| 湄潭县| 丁青县|