yuyee

          OSGI小記

          前幾個人因為項目中考慮使用OSGI來開發(fā),因此和同事調研了大概1個多月,當時沒做記錄,現(xiàn)在來彌補下
          OSIG,一個構件模塊化,動態(tài)化系統(tǒng)的標準,眾多應用服務器實現(xiàn)微核采用的技術,如weblogic,glassfish,最出名的是equinox,eclipse核心。
          在OSGI環(huán)境中,體現(xiàn)模塊化,動態(tài)化,
          模塊化:模塊之間獨立,部首其他模塊影響。
          其他模塊只能訪問該模塊對外提供的服務
          模塊具備獨立的生命周期,如啟動,停止,更新
          動態(tài)化:
          對于模塊的增加,修改,刪除,不需要做 額外的處理。
          OSGI中,每個模塊就是在物理上就是一個bundle,一個JAR包,是OSGI部署的最小單位,需要在每個JAR包的MANIFEST.MF中給這個bundle標識,象bundle-name,Bundle-SymbolicName,Bundle-ClassPath,Bundle-Activator;
          OSGI中bundle的隔離是通過java ClassLoader隔離性來完成的,JAVA中每個classloader空間都是隔離的,默認的classloader有bootStrap ClassLoader(jre/lib,jre/classes) extension classloader(jre/lib/ext),system classloader(-classpath),一般osgi框架還實現(xiàn)自己的應用類加載器。
          bundle隔離機制實現(xiàn):每個bundle都有一個獨立的classloader,通過bundle-classpath指定JAR路徑
          java中通過雙親委托來加載類,尋找類首先是從parent classloader中尋找,如果找不到才在當前的clasloader中尋找
          bundle類加載過程:
          java.*開頭的類委派給parent classloader加載;
          bootdelegationcan參數(shù)中配置的也委派給parent classloader加載,parent classloader找不到則繼續(xù)下面的操作;
          是否在import-Package中,在則委派給導出他的bundle的classloader 加載,不在則繼續(xù)下面
          是否在require-bundle中,在則委派給相應的bundleloader加載,不在繼續(xù)下面的
          是否在自己的bundle-classpath 中,不在則繼續(xù)下面的
          是否在fragmentsbundle的classpath中尋找,不在則繼續(xù)下面的( 在 OSGi 框架中提供了一種稱為 fragment 的特殊 bundle。在裝載的過程中,這類 fragment 是被附加到被稱為“宿主”的 bundle 上,最后作為一個整體 bundle 運行于 OSGi 環(huán)境中。最為典型的 fragment 應用場景是多語言包發(fā)布,將包含多語言包的 bundle 作為主體程序 bundle 的 fragment,這樣可以將多語言包和主體 bundle 作為兩個獨立的部分來發(fā)布,但在運行時它們又是一個整體。)
          是否在export-package中,不在繼續(xù)下面的
          是否在dynamicimport-package中,在則加載,不在則拋classNotfoundexception
          通過MANIFEST.MF定義import-package等,當要注意,最好定義包的版本 如:Import-Package: org.eclipse.osgi.framework.console;version="1.0.0",
           org.osgi.framework;version="1.3.0"
          Import-Package尋找機制:
          resolved的優(yōu)先未resolved
          版本高的優(yōu)先版本低的,如果版本一樣,則比較bundle id,小的優(yōu)先,也就是先安裝的bundle優(yōu)先



          posted on 2010-10-26 17:28 羔羊 閱讀(931) 評論(0)  編輯  收藏 所屬分類: osgi

          主站蜘蛛池模板: 始兴县| 安丘市| 屏东市| 东兰县| 卢氏县| 辛集市| 双流县| 镇巴县| 阿尔山市| 铜陵市| 广州市| 登封市| 习水县| 五指山市| 沙河市| 阜康市| 桦甸市| 乐都县| 武定县| 八宿县| 东平县| 长治县| 双江| 双牌县| 杭州市| 同德县| 绍兴市| 丹寨县| 赣州市| 宜川县| 临沭县| 南部县| 襄垣县| 安化县| 长武县| 卢龙县| 阳泉市| 太保市| 乌拉特前旗| 麻江县| 琼结县|