




已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
用osgi框架開發(fā)第一個web應(yīng)用,作者:李金峰,什么是bundle?,編寫一個很普通的 osgi應(yīng)用,必須首先創(chuàng)建一個 plug-in 工程,然后編輯其 Activator 類的 start 方法,實際我們這樣做的本質(zhì)是為 OSGi 運行環(huán)境添加了一個 bundle,一個 bundle 必須的構(gòu)成元素如下: MANIFEST.MF:描述了 bundle 的所有特征,包括名字、輸出的類或者包,導(dǎo)入的類或者包,版本號等等. 代碼:包括 Activator 類和其它一些接口以及實現(xiàn),這個和普通的 Java 應(yīng)用程序沒有什么特殊的區(qū)別。 資源:當(dāng)然,一個應(yīng)用程序不可能沒有資源文件,比如圖片、properties 文件、XML 文件等等,這些資源可以隨 bundle 一起存在,也可以以 fragment bundle 的方式加入。 啟動級別的定義:可以在啟動前使用命令行參數(shù)指定,也可以在運行中指定,具體的 start level 的解釋,請參考 后面的說明。,框架做了些什么?,目標(biāo)平臺已經(jīng)為我們準(zhǔn)備了 N 個 bundle,它們提供各種各樣的服務(wù),OSGi 中,這些 bundle 的名字叫 system bundle,就好比精裝修的房子,您只需要拎包入住,不再需要自己鋪地板,裝吊頂了。 我們的 bundle 進入 Equinox 環(huán)境后,OSGi 框架對其做的事情如下: 讀入 bundle 的 headers 信息,即 MANIFEST.MF 文件; 裝載相關(guān)的類和資源; 解析依賴的包; 調(diào)用其 Activator 的 start 方法,啟動它; 為其提供框架事件、服務(wù)事件等服務(wù); 調(diào)用其 Activator 的 stop 方法,停止它;,Bundle 狀態(tài),INSTALLED 就是字面意思,表示這個 bundle 已經(jīng)被成功的安裝了 RESOLVED 很常見的一個狀態(tài),表示這個 bundle 已經(jīng)成功的被解析(即所有依賴的類、資源都找到了),通常出現(xiàn)在啟動前或者停止后 STARTING 字面意思,正在啟動,但是還沒有返回,所以您的 Activator 不要搞的太復(fù)雜 ACTIVE 活動的,這是我們最希望看到的狀態(tài),通常表示這個 bundle 已經(jīng)啟動成功,但是不意味著您的 bundle 提供的服務(wù)也是 OK 的 STOPPING 字面意思,正在停止,還沒有返回 UNINSTALLED 卸載了,狀態(tài)不能再發(fā)生變更了,Bundle 導(dǎo)入導(dǎo)出 package,每個 bundle 都可以有自己公共的部分和隱藏的部分,每個 bundle 也只能看見自己的公共部分、隱藏部分和其它 bundle 的公共部分。 bundle 的 MANIFEST.MF 文件提供了 EXPORT/IMPORT package 的關(guān)鍵字,這樣你可以僅僅 export 出你希望別人看到的包,而隱藏實現(xiàn)的包。并且你可以為它們編上版本號,這樣可以同時發(fā)布不同版本的包。,啟動級別 Start level,start level 越大,表示啟動的順序越靠后。在實際的應(yīng)用環(huán)境中,我們的 bundle 互相有一定的依賴關(guān)系,所以在啟動的順序上要有所區(qū)別,好比蓋樓,要從打地基開始。 實際上,OSGi 框架最初的 start level 是 0,啟動順序如下: 將啟動級別加一,如果發(fā)現(xiàn)有匹配的 bundle(即 bundle 的啟動級別和目前的啟動級別相等),則啟動這個 bundle; 繼續(xù)第一步,直到發(fā)現(xiàn)已經(jīng)啟動了所有的 bundle,且活動啟動級別和最后的啟動的 bundle 啟動級別相同。 停止順序,也是首先將系統(tǒng)的 start level 設(shè)置為 0: 由于系統(tǒng)當(dāng)前活動啟動級別大于請求的 start level,所以系統(tǒng)首先停止等于當(dāng)前活動啟動級別的 bundle; 將活動啟動級別減一,繼續(xù)第一步,直到發(fā)現(xiàn)活動啟動級別和請求級別相等,都是 0。,開發(fā)圖書索引功能的例子,在瀏覽器輸入框中輸入一個字符,就能把字符相關(guān)的圖書名字都查詢出來。 這里有三個bundle,分別是:查詢響應(yīng)bundle:WebBundle,服務(wù)bundle:QueryServiceImpBundle,服務(wù)接口bundle:QueryServiceBundle,Bundle之間的關(guān)系,查詢響應(yīng)bundle 提供輸入要查詢字符的頁面,接受用戶的查詢請求,從 BundleContext 中獲取字典服務(wù)的Service, 調(diào)用字典服務(wù)的查詢接口得到查詢結(jié)果,并返回結(jié)果到頁面。 服務(wù)bundle 提供匹配索引的書名。 服務(wù)接口bundle 提供對外接口,配置tomcat端口,改為8080,如下圖在VM arguments中輸入: -Dorg.osgi.service.http.port=8080,點擊Run.,OSGI框架嵌入HTTP服務(wù)器,在Run Configurations的對話框中創(chuàng)建一個新的OSGI Framework的運行配置,在這個配置的Bundles中選擇下面幾個Bundle: javax.servlet; mons.logging; org.eclipse.equinox.http.jetty; org.eclipse.equinox.http.servlet; org.eclipse.osgi; org.eclipse.osgi.services; org.motbay.jetty;,驗證,點擊Validate Bundles,彈出 No problems were detected,驗證通過。 點擊Ok,點擊Run,在控制臺輸入命令SS,輸出在運行的Bundle,如下圖:,建立QueryServiceBundle,建立接口,在com.li.service.query下建立接口QueryServiceBundle,Exported Packages,雙擊MANIFEST.MF,選擇Runtime選項,在Exported Packages右側(cè)點擊Add.,如圖:,導(dǎo)出包的作用,選擇com.li.service.query,點擊Ok,保存,導(dǎo)出成功,如下圖。 導(dǎo)出包的目的是為了其他Bundles調(diào)用實現(xiàn)。,建立QueryServiceImpBundle,Imported Packages,雙擊MANIFEST.MF,選擇Dependencies選項,在Imported Packages右側(cè)點擊Add.,如圖:,導(dǎo)入包的作用,選擇com.li.service.query,點擊Ok,保存,導(dǎo)人成功,如下圖。 導(dǎo)入包的目的是為了供Bundle內(nèi)部調(diào)用,創(chuàng)建查詢服務(wù)類QueryServiceImpBundle,如下圖:,編寫Activator代碼,編寫Activator代碼,在Bundle啟動時注冊我們提供的查詢服務(wù)。 我們同BundleContext進行服務(wù)注冊,在WebBundle中會找到這個服務(wù),進行使用,代碼如下:,創(chuàng)建WebBundle,創(chuàng)建WebBundle,在src下建立文件page/query.htm,如下圖,在WebBundle中引入包,創(chuàng)建WebBundle,在sr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件設(shè)計師考試項目執(zhí)行與成果考量試題及答案
- 2023-2025北京高二(上)期末數(shù)學(xué)匯編:統(tǒng)計章節(jié)綜合
- 財稅體制改革對經(jīng)濟增長的影響試題及答案
- 核心網(wǎng)絡(luò)技術(shù)試題及答案
- 未來公司戰(zhàn)略與技術(shù)創(chuàng)新試題及答案
- 計算機程序設(shè)計的最佳實踐試題及答案
- 公寓改造項目可行性分析與創(chuàng)新探索
- 2025年考試中的模擬測試與評估試題及答案
- 低空經(jīng)濟公司運營新策略
- 行政法學(xué)考試經(jīng)驗分享試題及答案
- 2023版煤礦安全管理人員考試題庫及解析
- DBJ04T 289-2020 建筑工程施工安全資料管理標(biāo)準(zhǔn)
- 化工設(shè)計知到智慧樹章節(jié)測試課后答案2024年秋浙江大學(xué)
- 互聯(lián)網(wǎng)金融(同濟大學(xué))知到智慧樹章節(jié)測試課后答案2024年秋同濟大學(xué)
- 宏觀經(jīng)濟學(xué)知到智慧樹章節(jié)測試課后答案2024年秋浙江大學(xué)
- 2024年中考數(shù)學(xué)復(fù)習(xí):中點模型專項練習(xí)
- 旅行社企業(yè)章程范本
- 2025年寧波余姚市直屬企業(yè)招招聘筆試參考題庫含答案解析
- 《心理健康測試》課件
- 《心房顫動》課件
- 靜脈輸液操作考試流程
評論
0/150
提交評論