乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Eclipse3.0平臺(tái)(OSGI)

       kukoo 2005-09-21

      Eclipse3.0平臺(tái)簡(jiǎn)介
      作者:張?jiān)鲋?BR>概要
      Eclipse3.0平臺(tái)與Eclipse2.1平臺(tái)的一個(gè)重要的區(qū)別就是,Eclipse3.0平臺(tái)建立在一個(gè)Java框架上,即Open Services Gateway Initiative(OSGi)服務(wù)平臺(tái).OSGi的采用,使Eclipse走上了完全動(dòng)態(tài)平臺(tái)的發(fā)展道路.本文先簡(jiǎn)要介紹OSGi框架,然后介紹OSGi框架和Eclipse3.0平臺(tái)的聯(lián)系.

      概要
      Eclipse3.0平臺(tái)與Eclipse2.1平臺(tái)的一個(gè)重要的區(qū)別就是,Eclipse3.0平臺(tái)建立在一個(gè)Java框架上,即Open Services Gateway Initiative(OSGi)服務(wù)平臺(tái).OSGi的采用,使Eclipse走上了完全動(dòng)態(tài)平臺(tái)的發(fā)展道路.本文先簡(jiǎn)要介紹OSGi框架,然后介紹OSGi框架和Eclipse3.0平臺(tái)的聯(lián)系.


      一.  OSGi框架簡(jiǎn)介
      URL:http://blog.blogchina.com/upload/2004-11-24/20041124110530659453.jpg
      圖1:Eclipse3.0架構(gòu)
      如上圖所示,Eclipse3.0平臺(tái)是建立在OSGi(Open Services Gateway Initiative)服務(wù)平臺(tái)基礎(chǔ)之上的,所以有必要先介紹一下OSGi框架.
      OSGi框架
      OSGi框架是一個(gè)通用,安全,可管理的Java框架,它支持被稱為"bundle"的可擴(kuò)展和可下載的服務(wù)應(yīng)用的部署.與OSGi兼容的設(shè)備可以下載和安裝基于OSGi標(biāo)準(zhǔn)的bundle,并且還可以刪除不再需要的bundle.另外,已安裝的bundle可以注冊(cè)一組服務(wù)(service),這些服務(wù)可以在OSGi框架的嚴(yán)格控制下被其他bundle共享.
      OSGi框架以一種動(dòng)態(tài)和可升級(jí)的方式管理哪些處于OSGi環(huán)境中的bundle的安裝和更新,還管理bundle和服務(wù)(service)的依賴關(guān)系.
      Bundle
      在OSGi服務(wù)平臺(tái)中,bundle是部署的Java應(yīng)用的唯一實(shí)體.一個(gè)bundle由Java類和其它資源組成,它們提供功能給終端用戶,提供服務(wù)組件(serveices)給其它的bundle.
      Bundle是作為JAR文件被部署的.可以說(shuō),一個(gè)bundle就是一個(gè)JAR文件,它包括:
      1>     容納了實(shí)現(xiàn)零個(gè)或多個(gè)服務(wù)的資源.這些資源可以是Java類文件,也可以是其它數(shù)據(jù)文件如HTML文件,圖標(biāo)文件等.
      2>     容納了一個(gè)manifest文件.該文件描述了JAR文件的內(nèi)容和與bundle相關(guān)的配置信息.
      3>     陳述了對(duì)其他資源如Java中的包(package)的依賴關(guān)系.
      4>     指明bundle中的一個(gè)Java類作為Bundle Activator接口的實(shí)現(xiàn)類.OSGi框架必須實(shí)例化該類并調(diào)用start和stop方法來(lái)啟動(dòng)和停止bundle.
      MANIFEST.MF文件
      每一個(gè)bundle都有一個(gè)描述其自身信息的MANIFEST.MF文件,該文件位于JAR文件中的META-INF目錄下.
      我們知道,在生成普通的Java JAR文件時(shí)都會(huì)要求指定一個(gè)MANIFEST.MF文件與該JAR文件關(guān)聯(lián)在一起.MANIFEST.MF文件的內(nèi)容格式可能如下:

      Manifest-Version: 1.0

      Ant-Version: Apache Ant 1.5.3

      Created-By: 1.4.2_04-b05 (Sun Microsystems Inc.)


      在OSGi框架中,每一個(gè)bundle的MANIFEST.MF文件除了可以包括上述內(nèi)容外,還定義了自己的OSGi MANIFEST內(nèi)容格式,例如:

      Manifest-Version: 1.0

      Ant-Version: Apache Ant 1.5.3

      Created-By: 1.4.2_04-b05 (Sun Microsystems Inc.)
      Bundle-Activator: test.osgi.exam2.Activator
      Export-Package: test.osgi.exam2.service
      Bundle-Name: English dictionary
      Bundle-Description: A bundle that registers an English dictionary service
      Bundle-Version: 1.0.0


      上例中顯示的是一組MANIFEST頭(header)/值(value)對(duì),如Bundle-Activator頭(header)的值為test.osgi.exam2.Activator.
      在OSGi框架定義了一組標(biāo)準(zhǔn)的MANIFEST頭(header),每一個(gè)header都有其特定的含義.上例中定義的Bundle-Activator頭信息的值test.osgi.exam2.Activator表示用來(lái)啟動(dòng)和停止"English dictionary" Bundle的類名. Export-Package頭信息的值test.osgi.exam2.service表示可以被導(dǎo)出的包名,即test.osgi.exam2.service包可以被其它Bundle導(dǎo)入并使用其中提供的服務(wù)(service).
      Bundle的受控狀態(tài)
      一個(gè)Bundle可能處在下面的狀態(tài)之中:
      ■     已安裝(installed)
      在OSGi框架安裝Bundle時(shí),將解析該Bundle的本地代碼的依賴關(guān)系.如果失敗,該Bundle將不會(huì)被安裝.一旦Bundle被安裝,OSGi框架將可對(duì)該Bundle的整個(gè)生命周期(如起動(dòng),停止,更新,卸載)進(jìn)行控制.
      ■     已解析(resolved)
      當(dāng)OSGi框架成功地解析Bundle的本地代碼的依賴關(guān)系時(shí),該Bundle就進(jìn)入解析狀態(tài).這些依賴關(guān)系包括:
      1>     Bundle的MANIFEST.MF文件中,MANIFEST頭Bundle-Classpath定義的類路徑依賴關(guān)系.
      2>     Bundle的MANIFEST.MF文件中,MANIFEST頭Export-Package和Import-Package定義的依賴關(guān)系.
      ■     起動(dòng)(starting)
      一旦Bundle被起動(dòng),該Bundle的狀態(tài)就被設(shè)置為ACTIVE,并一直持續(xù)到該Bundle被停止.在起動(dòng)前,MANIFEST.MF文件中MANIFEST頭Bundle-Activator定義的類將被實(shí)例化,該類實(shí)例的start方法被調(diào)用以起動(dòng)Bundle.
      ■     停止(stopping)
      一旦Bundle被停止,該Bundle的狀態(tài)就被設(shè)置為RESOLVED.在停止前,上文中提到的Bundle-Activator類定義的stop方法被調(diào)用以停止Bundle.
      ■     激活(active)
      已經(jīng)被激活的Bundle可以進(jìn)行自身狀態(tài)的更新.在任何時(shí)候,OSGi框架只能滿足一個(gè)Bundle的唯一版本可用.Bundle的更新操作支持該Bundle移植到一個(gè)高版本或向后兼容的版本.
      ■     已卸載(uninstalled)
      在卸載前,上文中提到的Bundle-Activator類定義的uninstall方法被調(diào)用以卸載Bundle,該方法將使OSGi框架提醒其他Bundle它正在進(jìn)行卸載操作,并設(shè)置該Bundle的狀態(tài)為UNINSTALL.如果該Bundle與其他Bundle存在關(guān)系,如它導(dǎo)出一些被其他Bundle使用的包(即該Bundle的MANIFEST文件中定義了Export-Package),OSGi框架在沒(méi)有被重啟的情況下將繼續(xù)確保這些包仍可用.如果該Bundle與其他Bundle沒(méi)有關(guān)系,OSGi框架將恢復(fù)到該Bundle被安裝前的狀態(tài).
      下面的Bundle狀態(tài)圖描述了Bundle的受控狀態(tài).
      URL:http://blog.blogchina.com/upload/2004-11-24/20041124110552991489.jpg
      圖2
      類裝載(Class Loading)
      Bundle就是一個(gè)JAR文件,OSGi框架所面臨的首要問(wèn)題就是,怎樣去獲取隨時(shí)可能被"扔進(jìn)"框架中的Bundle內(nèi)的類文件和其它資源.
      對(duì)于每一個(gè)已安裝或已解析的Bundle,OSGi框架都會(huì)建立該Bundle的Classloader.這個(gè)Classloader還被建立在下面圖3所示的委托模型中.
      URL:http://blog.blogchina.com/upload/2004-11-24/20041124110606586667.jpg
      圖3
      其中:
      1>     Bootstrap類裝載器裝載Java核心API中的類.
      2>     SystemClassLoader類裝載器可以是系統(tǒng)類路徑類裝載器和標(biāo)準(zhǔn)擴(kuò)展類裝載器,還可以是其他用戶自定義類裝載器,裝載系統(tǒng)CLASSPATH上的類或Java擴(kuò)展路徑上的類或用戶指定的類.
      3>     BundleClassLoader類裝載器裝載該Bundle的MANIFEST文件中Bundle-ClassPath頭所指定的類文件.如果該Bundle需要導(dǎo)入其它Bundle中導(dǎo)出的包,那么這些Bundle的類裝載器的實(shí)例也要被建立在如圖3所示的委托模型中,并為該Bundle提供它所需的類.
      上文中只是對(duì)OSGi框架進(jìn)行了簡(jiǎn)短地介紹,關(guān)于它的詳細(xì)信息請(qǐng)參照: http://www.
      二.  Eclipse3.0插件和OSGi Bundle
      OSGi服務(wù)平臺(tái)規(guī)范是一個(gè)開(kāi)放的架構(gòu),用戶可以根據(jù)自己的需要來(lái)實(shí)現(xiàn)這個(gè)規(guī)范.Eclipse3.0就提供了該規(guī)范的一個(gè)實(shí)現(xiàn).
      我們知道,在OSGi中基本的模塊單元是Bundle,在Eclipse中則是插件(plug-in).在Eclipse2.1中,插件往往表現(xiàn)為plugins目錄下的一個(gè)文件夾.例如如下的目錄結(jié)構(gòu):
          + D:\eclipse
              + plugins
                  + eclipseme
                      + docs
                      + icons
                      + lib
                      - about.html
                      - CHANGES.txt
                      - CREDITS.txt
                      - eclipseme.jar
                      - JETTY-LICENSE.html
                      - LICENSE.txt
                      - plugin.properties
                      - plugin.xml
                      - README.txt
                      - toc.xml
                  + org.apache.ant_1.5.3
      上述eclipseme插件提供了Eclipse2.1平臺(tái)和J2ME的集成.在每一個(gè)Eclipse2.1插件中,都包含一個(gè)plugin.xml文件,其中描述了插件名,版本號(hào),需要的JAR包和插件要使用的擴(kuò)展點(diǎn)等等.
      ■ plugin.xml   插件清單文件
      ■ plugin.properties   容納被plugin.xml引用的字符串.
      ■     about.html   證書(shū)信息
      ■     *.jar   插件需要的類文件
      ■     lib   容納第三方JAR包
      ■     icons   容納icon文件,通常是GIF格式
      ■     docs   容納文檔文件,通常是HTML格式
      ■     toc.xml   文檔結(jié)構(gòu)清單文件
      ■     (other files)
      在Eclipse3.0中,插件不僅表現(xiàn)為plugins目錄下的一個(gè)文件夾,還包括一個(gè)MF文件.這個(gè)MF文件可以位于該插件文件夾下.也可位于configuration\org.eclipse.osgi\manifests目錄下.如:
      例1:
          + D:\eclipse
              + configuration
                  + org.eclipse.osgi
                      + manifests
                          - eclipseme_0.1.0.MF
      例2:
          + D:\eclipse
              + plugins
                  + org.eclipse.osgi_3.0.0
                      + META-INF
                          - MANIFEST.MF
      在Eclipse3.0中,插件也可被稱為Bundle.Bundle的類文件和資源文件就是插件文件夾下的JAR文件和其他資源文件,Bundle的MANIFEST文件就是上文中提到的MF文件.
      Eclipse的插件信息是被配置在plugin.xml中的.OSGi Bundle信息是被配置在MANIFEST.MF文件中的.下面就說(shuō)說(shuō)它們的聯(lián)系.
      plugin.xml包括三個(gè)部分的信息.
      1>     插件基本信息.如插件名,插件ID號(hào),插件版本號(hào),插件提供者名和插件類的全限定名.
      2>     插件的依賴關(guān)系和插件的運(yùn)行庫(kù).
      3>     插件的擴(kuò)展和擴(kuò)展點(diǎn).
      在Eclipse3.0中,前兩部分的信息可以被配置在MANIFEST.MF文件中.如Eclipse3.0中的runtime插件.考慮到與Eclipse以前版本的兼容,plugin.xml文件仍然支持對(duì)上三部分信息的配置格式.但是,Eclipse3.0平臺(tái)運(yùn)行在處理插件信息時(shí),它認(rèn)為插件是一個(gè)Bundle外加上擴(kuò)展和擴(kuò)展點(diǎn).
      Eclipse2.1的平臺(tái)運(yùn)行內(nèi)核緩存所有插件的注冊(cè)信息在Registry API中,所有這些信息是從.registry文件中或解析所有的plugin.xml文件(安裝新插件的情況下)獲取的.在Eclipse3.0中,Registry API已經(jīng)不被建議使用,對(duì)所有插件的注冊(cè)信息的緩存已被重構(gòu)為兩部分,一是Bundle數(shù)據(jù),另外是ExtensionRegistry API,它們分別從.bundledata或.state文件和.registry.X文件中獲取.這三個(gè)文件是Eclipse生成的,它們的數(shù)據(jù)來(lái)源是各個(gè)插件的plugin.xml和MANIFEST.MF文件.當(dāng)平臺(tái)安裝新的插件時(shí),它們都將被重新生成.之所以從它們中而不是直接解析plugin.xml和MANIFEST.MF文件,是要Eclipse起動(dòng)更快.
      在Eclipse3.0中,有些插件文件夾下并沒(méi)有MANIFEST.MF文件,這是為了兼容Eclipse以前版本的插件.對(duì)于每一個(gè)已被Eclipse3.0安裝(installed)的插件(Bundle),系統(tǒng)都會(huì)生成一個(gè)MF文件在configuration\org.eclipse.osgi\manifests目錄下(已經(jīng)有MANIFEST.MF文件的插件除外).被生成的MF文件內(nèi)容只是該插件的plugin.xml文件中擴(kuò)展點(diǎn)外的部分?jǐn)?shù)據(jù).


      關(guān)于作者:本文作者張?jiān)鲋荆壳霸谥袊?guó)北京先進(jìn)數(shù)通信息技術(shù)有限公司工作,從事Java方面的開(kāi)發(fā)和研究。
      Email:zzz8067@hotmail.com
      聯(lián)系地址:北京市海淀區(qū)車道溝1號(hào)濱河大廈D座6層
      郵編:100089

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多