天天看點

OSGI開發的一點心得

最近用OSGI+嵌入jetty做了一個IDE的背景管理,OSGI真是個好東西,即插即用。

現總結一下初學時候遇到的問題。

1、啟動WEB服務

       需要加載6個插件(org.eclipse.osgi是預設一定要加載的插件,不計入其中):

       javax.servlet

       org.apache.commons.logging

       org.eclipse.equinox.http

       org.eclipse.equinox.http.servlet

       org.eclipse.osgi.services

       org.mortbay.jetty

2、導出\配置\啟動OSGI遇到的問題:

如何導出OSGI?

首先是打包,可以自己手動來,找到OSGI需要的全部插件,然後打包,也可以選擇maven2等插件來幫助打包并解決依賴性問題,目前為了保持幹淨的工作空間,我沒有安裝任何其他的插件,但又有數百個插件是要打包的,這種情況下,推薦如下方式:

a、建立一個target difinition項目,該項目用來儲存各種版本的壓縮檔案

b、在該項目下建立一個.target檔案,該target使用方式是一目了然的,Eclipse提供了target editor。

OSGI開發的一點心得

     在這裡選擇引用檔案夾,target編輯器将會從這些位置搜尋插件,注意,它并不真正的産生效果,僅僅隻是為了後面查找插件依賴服務的,相當于添加索引。

OSGI開發的一點心得

     在這個位置添加你要啟動的插件,依賴性通過右邊的“Add Required”自動完成。注意:該editor的功能并不完善,它隻是原樣的導出你的選擇,是以如果是你自己寫的插件,請之後再手動export,不然隻有src沒有bin,當然你可以通過配置build選項,給bin檔案夾打鈎來解決(我的下步工作會是寫個新的建構器,使之能給自定義插件打jar包),然後,add required也會導入很多多餘的插件,如ui包等。

    然後選擇導出,即可。

OSGI開發的一點心得

如何配置OSGI?

你需要一個start.bat,内容參考插件configuration的argument

如 

java -jar -Dorg.osgi.service.http.port=10000 equinox.jar -console 10000為指定的端口。 equinox.jar是啟動的jar包,equinox是eclipse基于OSGI架構的産品。該jar包可以在eclipse的plugins目錄找到。複制,放在根目錄下。建立一個configuration檔案夾,裡面有config.ini配置檔案。内容如下: #This configuration file was written by: #org.eclipse.equinox.internal.frameworkadmin.equinox.EquinoxFwConfigFileParser 

#Thu Dec 22 15:48:36 CST 2011 

#org.eclipse.update.reconcile=false 

#[email protected]/workspace 

#osgi.framework=plugins/org.eclipse.osgi_3.7.0.v20110613.jar 

#equinox.use.ds=true 

osgi.noShutdown=true 

eclipse.ignoreApp=true 

#org.osgi.framework.bootdelegation=* 

osgi.bundles=reference\:file\:plugins/javax.servlet_2.5.0.v201103041518.jar@\:start,\ 

reference\:file\:plugins/org.apache.commons.logging_1.0.4.v201101211617.jar@\:start,\ 

reference\:file\:plugins/org.eclipse.equinox.http.jetty_2.0.100.v20110502.jar@\:start,\ 

reference\:file\:plugins/org.eclipse.equinox.http.servlet_1.1.200.v20110502.jar@\:start,\ 

reference\:file\:plugins/org.mortbay.jetty.util_6.1.23.v201012071420.jar@\:start,\ 

reference\:file\:plugins/org.mortbay.jetty.server_6.1.23.v201012071420.jar@\:start,\ 

reference\:file\:plugins/org.eclipse.osgi.services_3.3.0.v20110513.jar@\:start 

osgi.bundles.defaultStartLevel=4嗯,以上屬性……參考字面意思。注意插件的加載級别即可。  如何啟動OSGI?輕按兩下start.bat…… 

遇到的ClassNotFoundException問題

       有可能是因為config.ini中的org.osgi.framework.bootdelegation沒有配置好

       org.osgi.framework.bootdelegation=* 即可

       當然也可以指定package,用逗号隔開,可以使用通配符

繼續閱讀