隨筆-1  評論-9  文章-7  trackbacks-0

          1. 開發(fā)環(huán)境的準(zhǔn)備

                  現(xiàn)在的eclipse都已經(jīng)包含了Equinox,無需單獨下載。
          2. 開發(fā)OSGi的HelloWorld應(yīng)用程序

                 在這一節(jié),我們將開發(fā)一個OSGi bundle,演示如何利用Equinox進行OSGi bundle的開發(fā)、運行及調(diào)試,為之后的示例做準(zhǔn)備。
                 首先,新建一個Plug-in工程,如下圖所示:

          下一步,注意選擇目標(biāo)平臺,默認(rèn)為Eclipse version *,將其改成Equinox,如下圖所示:


          之后按默認(rèn)下一步即可,到最后一步時,無需根據(jù)模板創(chuàng)建工程,去掉默認(rèn)的勾,如下圖:


          點擊完成,創(chuàng)建的工程目錄如下圖所示:


          從圖中,可以看到,eclipse為工程自動生成了一個Activator類,如下所示:
          package helloworld;   
            
          import org.osgi.framework.BundleActivator;   
          import org.osgi.framework.BundleContext;   
            
          public class Activator implements BundleActivator {   
            
              
          /*  
               * (non-Javadoc)  
               * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)  
               
          */
            
              
          public void start(BundleContext context) throws Exception {   
                  System.out.println(
          "Hello World!");   
              }
             
            
              
          /*  
               * (non-Javadoc)  
               * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)  
               
          */
            
              
          public void stop(BundleContext context) throws Exception {   
              }
             
            
          }
            
                  有過eclipse插件開發(fā)經(jīng)驗的人應(yīng)該很快就能明白,這就是該工程——實際上就是上一篇文章中所稱的bundle在Equinox平臺中的啟動入口,相當(dāng)于我們的熟悉的main函數(shù),如果將該bundle運行到Equinox中,首先進入該bundle的是Activator的start方法,你可以將相關(guān)的服務(wù)、資源在該方法內(nèi)完成向bundleContext的注冊——文章后面會具體講到相關(guān)內(nèi)容。在運行期,如果想要該bundle停止運行,Equinox平臺將調(diào)用Activator的stop方法,你可以在該方法內(nèi)完成資源的注銷等工作。
                  下面我們將要完成首次的Equinox運行,將向大家展現(xiàn)bundle到底是如何運行起來的。為helloworld選擇運行方式,如下圖所示:

                  彈出如下對話框:

                  在彈出的對話框中,新建一個OSGi Framework運行環(huán)境(雙擊OSGi Framework即可,這里為其取名Equinox),選中helloworld(1.0.0),然后點擊右邊的Add Required Bundles按鈕,eclipse將自動選中運行helloworld的依賴bundle,如果有必要,可以點擊右下的Validate Bundles驗證按鈕,驗證程序正常運行所需的bundle是否都被選中,最后點擊運行,回到控制臺:
          osgi> Hello World!
                  可以看到,之前在Activator的start方法中的輸出語句已經(jīng)被輸出到控制臺,我們可以通過命令ss查看Equinox的運行情況,可以看到一共運行了兩個bundle,如下:
          ss

          Framework is launched.

          id State       Bundle
          0 ACTIVE      org.eclipse.osgi_3.4.3.R34x_v20081215-1030
          1 ACTIVE      helloworld_1.0.0

                  還記得之前講到過的bundle的幾種狀態(tài)吧?helloworld已經(jīng)運行起來了。
                  那么Equinox具體支持哪些命令呢?下表列出了主要的一些命令,如需查看更詳細(xì)的命令清單,則可以在控制臺鍵入help。

          類別

          命令

          含義

          控制框架

          launch

          啟動框架

          shutdown

          停止框架

          close

          關(guān)閉、退出框架

          exit

          立即退出,相當(dāng)于 System.exit

          init

          卸載所有 bundle(前提是已經(jīng) shutdown)

          setprop

          設(shè)置屬性,在運行時進行

          控制 bundle

          install

          安裝

          uninstall

          卸載

          start

          啟動

          stop

          停止

          refresh

          刷新

          update

          更新

          展示狀態(tài)

          status

          展示安裝的 bundle 和注冊的服務(wù)

          ss

          展示所有 bundle 的簡單狀態(tài)

          services

          展示注冊服務(wù)的詳細(xì)信息

          packages

          展示導(dǎo)入、導(dǎo)出包的狀態(tài)

          bundles

          展示所有已經(jīng)安裝的 bundles 的狀態(tài)

          headers

          展示 bundles 的頭信息,即 MANIFEST.MF 中的內(nèi)容

          log

          展示 LOG 入口信息

          其它

          exec

          在另外一個進程中執(zhí)行一個命令(阻塞狀態(tài))

          fork

          和 EXEC 不同的是不會引起阻塞

          gc

          促使垃圾回收

          getprop

          得到屬性,或者某個屬性

          控制啟動級別

          sl

          得到某個 bundle 或者整個框架的 start level 信息

          setfwsl

          設(shè)置框架的 start level

          setbsl

          設(shè)置 bundle 的 start level

          setibsl

          設(shè)置初始化 bundle 的 start level

                  至此,我們已經(jīng)成功的演示了helloworld,初步了解了OSGi的bundle是如何開發(fā)并運行的。

          posted on 2010-03-28 16:58 Dreava 閱讀(2209) 評論(0)  編輯  收藏 所屬分類: OSGi

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 高邮市| 上林县| 丹凤县| 康保县| 南安市| 海原县| 青川县| 万源市| 山丹县| 安泽县| 焦作市| 广东省| 衡山县| 普宁市| 台山市| 阳春市| 金湖县| 四子王旗| 财经| 革吉县| 那坡县| 东阳市| 青龙| 宁明县| 阿拉善左旗| 濮阳县| 东乌| 北碚区| 彰武县| 玛沁县| 古交市| 桐梓县| 清水河县| 仁怀市| 霍城县| 阿鲁科尔沁旗| 筠连县| 亚东县| 南投市| 繁峙县| 遵化市|