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























