基于Maven構(gòu)建OSGI.docx_第1頁(yè)
基于Maven構(gòu)建OSGI.docx_第2頁(yè)
基于Maven構(gòu)建OSGI.docx_第3頁(yè)
基于Maven構(gòu)建OSGI.docx_第4頁(yè)
基于Maven構(gòu)建OSGI.docx_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于Maven構(gòu)建OSGI概述:OSGI的出現(xiàn)彌補(bǔ)了Java模塊化的不足。而模塊化和動(dòng)態(tài)化的概念實(shí)現(xiàn)了我們夢(mèng)想中的“即插即用”的系統(tǒng)。本文以Maven為工具構(gòu)建基于Maven的OSGI程序。這其中包括工程的創(chuàng)建、容器的啟動(dòng)、Bundle的導(dǎo)入和Bundle的創(chuàng)建等等。開(kāi)發(fā)環(huán)境使用的是Eclipse 3.6。1、使用Maven創(chuàng)建一個(gè)OSGI項(xiàng)目在Eclipse中選擇New-Project。彈出如下窗口:然后選擇Maven-Maven Project。如下圖所示:點(diǎn)擊”Next”,進(jìn)行下一步的選擇。如下圖:在Filter中選擇過(guò)濾條件,輸入OSGI。如下圖:選擇OPS4J的pax construct。繼續(xù)next。輸入Group Id 和Artifact Id,點(diǎn)擊Finish完成。(找到工程下父級(jí)pom.xml文件,刪除maven-pax-plugin插件的版本信息,也就是刪除該元素??梢允褂肕aven install 進(jìn)行驗(yàn)證。 )PS: 該系列操作也可以使用下面的命令進(jìn)行完成:mvn org.ops4j:maven-pax-plugin: create-project-DgroupId=pany.osgi-DartifactId=test-osgi-Dversion=0.12、啟動(dòng)OSGI容器選擇運(yùn)行按鈕旁邊的三角箭頭,選擇 Run Configuration。如下圖:選擇Maven Build,在此選項(xiàng)上右鍵點(diǎn)擊選擇 New。如下圖:在該圖示中,可以選擇使用Browse Workspace或者 Browse File System來(lái)選擇項(xiàng)目,在此可以使用Browse Workspace來(lái)選擇我們新建立的項(xiàng)目。在Goals中輸入 install pax:provision。如下圖:點(diǎn)擊Run直接運(yùn)行。這時(shí)刷新項(xiàng)目會(huì)生成一個(gè)runner的目錄。3、使用Maven導(dǎo)入OSGI Bundle根據(jù)如上所示步驟,新建立maven 構(gòu)建命令,命令依次如下:Webconsole(這不是命令)pax:import-bundle-DgroupId=org.apache.felix -DartifactId=org.apache.felix.webconsole -Dversion=3.1.8Servlet(這不是命令)pax:import-bundle -DgroupId=org.apache.felix -DartifactId=javax.servlet -Dversion=1.0.0Scr(這不是命令)pax:import-bundle-DgroupId=org.apache.felix -DartifactId=org.apache.felix.scr -Dversion=1.0.8jetty(這不是命令)pax:import-bundle -DgroupId=org.apache.felix -DartifactId=org.apache.felix.http.jetty -Dversion=2.2.0其中scr的最新版本為1.6.0,但是在環(huán)境中不能運(yùn)行成功,所以改為了1.0.8。接下來(lái)運(yùn)行mvn install ,或者使用菜單方式 Run As運(yùn)行 Maven install。然后運(yùn)行上圖中所配置的install pax:provision。運(yùn)行成功后將會(huì)顯示如下圖所類(lèi)似的信息:這時(shí)在瀏覽器中輸入地址:http:/localhost:8080/system/console/。用戶(hù)名和密碼均為admin,登陸成功后將會(huì)顯示,如下頁(yè)面:該頁(yè)面顯示出了bundle的信息??梢詫?duì)bundle進(jìn)行stop、update、uninstall等操作。4、使用Maven創(chuàng)建OSGI Bundle新建構(gòu)建命令如下:pax:create-bundle -Dpackage=IQueryWord -Dname=QueryWord -Dversion=0.0.1-SNAPSHOT(-Dpackage和-Dname的內(nèi)容可以被替換)接著執(zhí)行 install pax:provision。5、替換OSGI 框架的實(shí)現(xiàn)運(yùn)行如下命令:pax:provision Dframework=kf或者:pax:provision Dframework=equinox6、部署OSGI Bundle 到Maven 倉(cāng)庫(kù)首先下載Nexus professional(收費(fèi)),地址為:/download-nexus.html當(dāng)前最新版本為。壓縮文件為:解壓之后有兩個(gè)文件夾,如下圖:進(jìn)入nexus-professional-webapp-binjsw目錄找到和自己相應(yīng)系統(tǒng)的文件夾,如下圖所示:我的為windows-x86-32。然后執(zhí)行nexus.bat。如下圖:在地址欄輸入:http:/localhost:8081/nexus/如圖:點(diǎn)擊Log In。admin用戶(hù)的密碼為admin123. deployment用戶(hù)的密碼為deployment123。設(shè)置/.m2/setting.xml文件的內(nèi)容如下: nexus * http:/localhost:8081/nexus/content/groups/public nexus central http:/central true true central http:/central true true nx-snapshots deployment deployment123 nx-releases deployment deployment123 nexus 設(shè)置父級(jí)pom.xml文件,在節(jié)點(diǎn)下加入如下內(nèi)容: nx -releases Nexus Releases http:/localhost:8081/nexus/content/repositories/releases nx-snapshots Nexus Snapshots http:/localhost:8081/nexus/content/repositories/snapshots 新建Maven構(gòu)建命令,deploy DremoteOBR 。然后會(huì)在Snapshots中看到如下圖所示的內(nèi)容:完成此步驟之后,就可以在Maven中引用其他文件一樣來(lái)依賴(lài)該jar文件。例如:com.yihua.osgi.test-osgiIQueryWord0.0.1-SNAPSHOT注冊(cè)web應(yīng)用請(qǐng)參考如下實(shí)例程序:package ernal;import javax.servlet.Servlet;import org.osgi.framework.BundleActivator;import org.osgi.framework.BundleContext;import org.osgi.framework.ServiceEvent;import org.osgi.framework.ServiceListener;import org.osgi.framework.ServiceReference;import org.osgi.service.http.HttpService;/* * Extension of the default OSGi bundle activator */public final class ExampleActivator implements BundleActivator, ServiceListener private BundleContext bundleContext;private ServiceReference ref;private Servlet servlet;public void start(BundleContext context) throws Exception bundleContext = context;servlet = new QueryWebServlet(bundleContext);/ 在HttpService中注冊(cè)ServletregisterServlet();public void stop(BundleContext context) throws Exception try unregisterServlet(); catch (Throwable t) t.printStackTrace();servlet = null;bundleContext = null;ref = null;public void serviceChanged(ServiceEvent event) switch (event.getType() case ServiceEvent.REGISTERED:registerServlet();break;case ServiceEvent.UNREGISTERING:unregisterServlet();break;/* * 注冊(cè)Web應(yīng)用 */private void registerServlet() if (ref = null) ref = bundleContext.getServiceReference(HttpService.class.getName();if (ref != null) try HttpService http = (HttpService) bundleContext.getService(ref);if (null != http) / 注冊(cè)動(dòng)態(tài)資源Servlethttp.registerServlet(/osgi/servlet, servlet, null, null);/ 注冊(cè)靜態(tài)資源HTMLhttp.registerResources(/osgi/file, webapp, null); catch (Exception e) e.printStackTrace();/* * 卸載Web應(yīng)用 */private void unregisterServlet()

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論