值得注意的是,IBM之前已經(jīng)發(fā)布過(guò)alpha形式的OSGi feature pack,但并未聲明公開(kāi)版本發(fā)布的具體日期。IBM的feature pack是基于Apache Aries項(xiàng)目,來(lái)為企業(yè)應(yīng)用開(kāi)發(fā)者提供OSGi服務(wù)。
OSGi致力于提供更加容易的代碼庫(kù)管理的同時(shí),允許創(chuàng)建更多動(dòng)態(tài)的可以在運(yùn)行時(shí)運(yùn)行插件和擴(kuò)展的軟件。RedMonk的分析師Michale Cote認(rèn)為,"因?yàn)槟承┰颍琂ava代碼越發(fā)往整體復(fù)雜的趨勢(shì)發(fā)展,但也一直存在技術(shù)和文化上的努力在與巨大的復(fù)雜性進(jìn)行斗爭(zhēng)。從設(shè)計(jì)的角度看,OSGi和Java中的其他組件會(huì)是一種比較好的方式,來(lái)組織工程中的代碼,讓開(kāi)發(fā)者的日子更好過(guò)。"
在Eclipse方面,新建立的Gemini項(xiàng)目是與Eclipse運(yùn)行時(shí)相關(guān)聯(lián)的孵化項(xiàng)目,它基于OSGi。根據(jù)EclipseCon 2010技術(shù)大會(huì)中有關(guān)Gemini話(huà)題的網(wǎng)頁(yè),以及前Eclipse董事會(huì)成員之一Mik Kersten所說(shuō)的,"Gemini的目標(biāo)是在一個(gè)模塊化框架中提供對(duì)標(biāo)準(zhǔn)企業(yè)技術(shù)的訪問(wèn)。Gemini將會(huì)采用OSGi,并讓企業(yè)服務(wù)器端模塊集成在一起更加簡(jiǎn)單。Gemini將會(huì)為在OSGi中使用企業(yè)技術(shù)提供"隨時(shí)可用的實(shí)現(xiàn)"。另外一個(gè)新項(xiàng)目Eclipse Virgo則提供來(lái)一個(gè)基于OSGi的應(yīng)用服務(wù)器,Virgo起源于Spring Source dm Server產(chǎn)品。"
關(guān)于OSGi
OSGi亦稱(chēng)做Java語(yǔ)言的動(dòng)態(tài)模塊系統(tǒng),它為模塊化應(yīng)用的開(kāi)發(fā)定義了一個(gè)基礎(chǔ)架構(gòu)。OSGi容器已有多家開(kāi)源實(shí)現(xiàn),比如Knoflerfish、Equinox和Apache的Felix。您可以通過(guò)這些容器,把您的應(yīng)用程序劈分為多個(gè)模塊單元,這樣,您就可以更容易地管理這些模塊單元之間的交叉依賴(lài)關(guān)系。
OSGi規(guī)范和Servlet規(guī)范及EJB規(guī)范類(lèi)似,該規(guī)范定義了兩種對(duì)象,一是容器對(duì)外提供的服務(wù)對(duì)象,另一個(gè)是容器和您的應(yīng)用程序之間必須遵守的契約,其中,服務(wù)對(duì)象是容器要實(shí)現(xiàn)的。您如果想要在OSGi平臺(tái)上進(jìn)行開(kāi)發(fā),首先,您必須要使用OSGi API來(lái)創(chuàng)建您的應(yīng)用,然后將之部署到OSGi容器中。
關(guān)于Java模塊化
模塊化是個(gè)一般概念,這一概念也適用于軟件開(kāi)發(fā),可以讓軟件按模塊單獨(dú)開(kāi)發(fā),各模塊通常都用一個(gè)標(biāo)準(zhǔn)化的接口來(lái)進(jìn)行通信。實(shí)際上,除了規(guī)模大小有區(qū)別外,面向?qū)ο笳Z(yǔ)言中對(duì)象之間的關(guān)注點(diǎn)分離與模塊化的概念基本一致。通常,把系統(tǒng)劃分外多個(gè)模塊有助于將耦合減至最低,讓代碼維護(hù)更加簡(jiǎn)單。
Java語(yǔ)言并不是按照模塊化思想設(shè)計(jì)的(除了package,按照J(rèn)ava語(yǔ)言規(guī)范introduction一 節(jié)的介紹,package類(lèi)似于Modula-3模塊),但是在Java社區(qū)依然有很多實(shí)際存在的模塊。任何一個(gè)Java類(lèi)庫(kù)實(shí)際上都是一個(gè)模塊,無(wú)論其 是Log4J、Hibernate還是Tomcat。通常,開(kāi)源和非開(kāi)源的應(yīng)用都會(huì)依賴(lài)于一個(gè)或多個(gè)外部類(lèi)庫(kù),而這種依賴(lài)關(guān)系又有可能傳遞到其他類(lèi)庫(kù)上。