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