部署并運(yùn)行你的OSGi Web應(yīng)用程序
譯文【51CTO精選譯文】本文是《你好,OSGi》系列的***一篇,講述在Eclipse外部如何執(zhí)行OSGi容器。在Eclipse IDE內(nèi)部執(zhí)行Equinox OSGi容器對(duì)于開(kāi)發(fā)非常便利。不過(guò),當(dāng)你的應(yīng)用程序準(zhǔn)備好部署,如果你想要在Eclipse外部執(zhí)行你的OSGi容器,可以按照下面的步驟從命令行運(yùn)行你的Equinox OSGi容器。
51CTO編輯推薦:OSGi入門與實(shí)踐全攻略
從Equinox下載完整的eclipse-equinox-<buildno>.zip 二進(jìn)制文件框架。本文中的示例代碼在版本3.3下進(jìn)行測(cè)試。
解壓縮下載的文件,保存到你的計(jì)算機(jī)上。本示例將使用目錄 C:\software。
在你的計(jì)算機(jī)上建立一個(gè)目錄,命名為 C:\equinox (或?qū)τ谀愕牟僮飨到y(tǒng)等同的目錄)。
從 C:\software 將下面的JAR文件復(fù)制到 C:\equinox:
- org.eclipse.osgi_<version>.jar
- javax.servlet v2_4.jar
- org.apache.commons.logging v1_0_4.jar
- org.eclipse.equinox.http.jetty.jar
- org.eclipse.equinox.http.registry.jar
- org.eclipse.equinox.http.servlet.jar
- org.mortbay.jetty v5_1_11.jar
- org.eclipse.equinox.common_<version>.jar
- org.eclipse.equinox.registry_<version>.jar
- org.eclipse.osgi.services_<version>.jar
現(xiàn)在,打開(kāi)命令控制臺(tái),將目錄更改到 C:\equinox,然后執(zhí)行下面的目錄:
- java -jar org.eclipse.osgi_<version>.jar -console
Equinox OSGi容器將啟動(dòng),并且你將會(huì)看到OSGi>提示符。
安裝、驗(yàn)證和執(zhí)行插件
需要指出的是,雖然你已經(jīng)將所有的插件 JAR 文件復(fù)制到了 C:\equinox 目錄,但所有這些插件還沒(méi)有安裝到OSGi容器。你必須一個(gè)一個(gè)地進(jìn)行安置??梢酝ㄟ^(guò)下面的命令語(yǔ)句在OSGi容器中安裝插件:
- install file:<pathtoplug-injar>
例如,如果你想要安裝javax_servlet v2_4 插件,那么你應(yīng)該執(zhí)行下面的這行命令:
- install file:javax.servlet_2.4<version>.jar
現(xiàn)在,使用install 命令安裝所有必須的插件。
在你的全部插件都安裝完畢后,你可以通過(guò)執(zhí)行ss命令來(lái)它們進(jìn)行驗(yàn)證。OSGi容器將顯示一個(gè)包含三個(gè)列的表格列出所有的已安裝插件:***列顯示插件的ID,第二列顯示插件的狀態(tài),第三列顯示套件的名稱。
請(qǐng)注意,所有套件都處于INSTALLED狀態(tài),除了INSTALLED套件,它處于ACTIVE狀態(tài)。因此,你下一步需要做的是啟動(dòng)所有插件。可以通過(guò)下面的命令啟動(dòng)插件:
- start <pluginid>
在本例中,javax.servlet v2_4套件的ID是1,所以你可以這樣來(lái)啟動(dòng)它:
- start 1
所有插件都啟動(dòng)之后,你可以通過(guò)調(diào)用ss命令來(lái)對(duì)他們進(jìn)行驗(yàn)證。在你的OSGi控制臺(tái)上顯示的內(nèi)容應(yīng)類似于圖 2 所示。
***,你可以通過(guò)在瀏覽器中輸入 http://localhost/helloworld.html
來(lái)測(cè)試你的OSGi Web應(yīng)用程序是否正確配置。你應(yīng)該可以看到消息“Hello from helloworld.html”。
將OSGi容器嵌入到servlet容器
在這個(gè)小節(jié),我們將來(lái)看看OSGi Web應(yīng)用程序的另一種部署方式,它將Equinox OSGi容器嵌入到一個(gè)Web應(yīng)用程序中,然后在servlet容器(如Apache Tomcat)中部署該Web應(yīng)用程序。Equinox框架提供bridge.war,一個(gè)模板,具有Equinox OSGi容器的Web應(yīng)用程序?qū)⑦@個(gè)模板嵌入到容器中。
bridge.war應(yīng)用程序包含org.eclipse.equinox.servletbridge.BridgeServlet。這個(gè)servlet負(fù)責(zé)對(duì)你的OSGi容器進(jìn)行初始化。每當(dāng)接收到一個(gè)客戶請(qǐng)求,它將查看是否存在一個(gè)OSGi插件可以處理該請(qǐng)求;如果存在,它將控制轉(zhuǎn)發(fā)至該插件。下面的步驟向你演示了如何使用bridge.war中的com.javaworld.sample.osgi.web.programmatic和com.javaworld.sample.osgi.web.declarative插件。
如果你還沒(méi)有安裝Apache Tomcat,請(qǐng)下載Apache Tomcat 5.5并將其解壓到操作系統(tǒng)文件夾 C:\software(或相應(yīng)的同等文件夾)。
下載bridge.war,然后將其安裝到你的Apache Tomcat服務(wù)器。一旦安裝完成,啟動(dòng)bridge.war Web應(yīng)用程序。
通過(guò)在瀏覽器中訪問(wèn)http://localhost:8080/bridge/sp_test
來(lái)測(cè)試Bridge Web應(yīng)用程序。你應(yīng)看到一條消息:“Servlet delegate registered - org.eclipse.equinox.http.servlet.HttpServiceServlet”。
現(xiàn)在,返回到你的Eclipse IDE。在包資源瀏覽器試圖中,右鍵單擊并選擇 Export > Deployable plug-ins and fragments,然后單擊下一步按鈕。在Deployable Plug-ins and fragments對(duì)話框中,輸入如圖 3所示的值。
單擊“完成”,Eclipse 將com.javaworld.sample.osgi.web.declarative.jar 和 com.javaworld.sample.osgi.web.programmatic.jar導(dǎo)出到 C:\software\apache-tomcat-5.5.25\webapps\bridge\WEB-INF\eclipse\plugins 文件夾(或你所用操作系統(tǒng)的同等文件夾)。請(qǐng)注意,Bridge Web應(yīng)用程序?qū)?C:\software\apache-tomcat-5.5.25\webapps\bridge\WEB-INF\ 文件夾中的內(nèi)容復(fù)制到Tomcat 工作目錄并從那里執(zhí)行。當(dāng)你網(wǎng)址:http://localhost:8080/bridge/sp_deploy
時(shí),Bridge Web 應(yīng)用程序?qū)⑦@些新的 JAR 文件復(fù)制到 C:\software\apache-tomcat-5.5.25\work\Catalina\localhost\bridge\eclipse \plugins。
現(xiàn)在,重啟你的Tomcat服務(wù)器。一旦Tomcat重啟完成,你將可以看到Tomcat控制臺(tái)中的 osgi> 提示符。
輸入ss來(lái)顯示所有已安裝到bridge.war中的OSGi套件。確認(rèn)com.javaworld.sample.osgi.web.declarative和com.javaworld.sample.osgi.web.programmatic已安裝到 OSGi容器;如果沒(méi)有安裝,可通過(guò)執(zhí)行 install file:<jarfilename> 命令進(jìn)行安裝。
在 OSGi命令提示符下,執(zhí)行 start <bundleid> 命令,啟動(dòng) com.javaworld.sample.osgi.web.declarative.jar 和 com.javaworld.sample.osgi.web.programmatic.jar 插件。
現(xiàn)在,你應(yīng)該能夠在瀏覽器中輸入 http://localhost:8080/bridge/helloworld.html
來(lái)訪問(wèn) helloworld.html 了。
探索該應(yīng)用程序
這個(gè)Bridge應(yīng)用程序提供了以下URL,利用它們,你可以從網(wǎng)絡(luò)瀏覽器來(lái)控制你的OSGi容器。(對(duì)于該示例,這些地址應(yīng)加在 http://localhost:8080/bridge/
后面;該URL可能會(huì)有所變化,要看你的Tomcat安裝情況。)
- sp_deploy:復(fù)制平臺(tái)內(nèi)容到工作或臨時(shí)目錄
- sp_undeploy:工作目錄刪除 Eclipse 的副本
- sp_redeploy:對(duì)平臺(tái)進(jìn)行重置(比如:終止、取消部署、部署以及啟動(dòng))
- sp_start:?jiǎn)?dòng)一個(gè)已部署平臺(tái)
- sp_stop:終止平臺(tái)
- sp_test:提供一個(gè)正常的檢測(cè),并且當(dāng)基于 OSGi 的servlet 已準(zhǔn)備好接收請(qǐng)求時(shí)終止
繼續(xù)研究探索這個(gè)應(yīng)用程序吧,別忘了給自己一個(gè)鼓勵(lì):你已經(jīng)開(kāi)發(fā)出了你的***個(gè)OSGi Web應(yīng)用程序!
總結(jié)
雖然OSGi的來(lái)源在于提供嵌入式和客戶端解決方案,但很多人認(rèn)為,它的強(qiáng)項(xiàng)將在于服務(wù)器端的開(kāi)發(fā)。服務(wù)器端Equinox是一個(gè)開(kāi)始,利用它,可以更加簡(jiǎn)便地將OSGi的可插入、基于組件的開(kāi)發(fā)模式應(yīng)用到Web應(yīng)用程序。(另一個(gè)是SpringSource應(yīng)用程序平臺(tái), 但不在本文講解的范圍之內(nèi)。)通過(guò)這篇文章中的示例,你已經(jīng)向OSGi Web應(yīng)用程序開(kāi)發(fā)邁出了***步。你已經(jīng)在Eclipse中設(shè)置了OSGi Web應(yīng)用程序開(kāi)發(fā)環(huán)境;學(xué)習(xí)了注冊(cè)O(shè)SGi套件的兩種方式:程序方式和聲明方式;以及,詳細(xì)了解了如何使用這兩種不同的方式對(duì)基于OSGi的Web應(yīng)用程序進(jìn)行部署:將Jetty servlet容器插件嵌入到 Equinox,并將Equinox嵌入到Tomcat。
在這個(gè)系列文章中,你學(xué)習(xí)如何開(kāi)始創(chuàng)建基于OSGi的應(yīng)用程序,學(xué)習(xí)了OSGi開(kāi)發(fā)模式以及創(chuàng)建了一個(gè)簡(jiǎn)單的包含兩個(gè)套件的客戶-服務(wù)器(client-server)應(yīng)用程序。你還學(xué)習(xí)了Spring動(dòng)態(tài)模型如何簡(jiǎn)化了OSGi容器中Spring應(yīng)用程序的開(kāi)發(fā),以及服務(wù)器端Equinox如何提供了一個(gè)可訪問(wèn)的框架以在服務(wù)器環(huán)境中開(kāi)發(fā)和部署OSGi應(yīng)用程序。
所有這些實(shí)踐練習(xí)為你打開(kāi)了OSGi開(kāi)發(fā)之門,希望這個(gè)系列的文章能夠幫助你更好地理解OSGi和Java的模塊化,以及將它應(yīng)用到你的未來(lái)Java開(kāi)發(fā)項(xiàng)目中。
【編輯推薦】