「Hello OSGi」系列最終篇,詳細演示如何在 Eclipse IDE 外部部署運行 OSGi Web 應用:模式一——命令列啟動 Equinox 容器、手動安裝/啟動 Bundle、嵌入 Jetty 提供 HTTP 服務;模式二——將 Equinox 容器封裝於 bridge.war,部署至 Tomcat,實現 OSGi 運行時與傳統 Servlet 容器共生。兩種模式涵蓋獨立部署與現有基礎設施整合兩大主流場景。
從 Equinox 下載 eclipse-equinox-<build>.zip,解壓至 C:\equinox,複製以下 JAR:
org.eclipse.osgi_<ver>.jar(核心框架)javax.servlet_2.4.jar、org.apache.commons.logging_1.0.4.jarorg.eclipse.equinox.http.jetty.jar、org.eclipse.equinox.http.registry.jar、org.eclipse.equinox.http.servlet.jar(HTTP 服務與 Jetty 整合)org.mortbay.jetty_5.1.11.jar(Jetty 核心)org.eclipse.equinox.common_<ver>.jar、org.eclipse.equinox.registry_<ver>.jar、org.eclipse.osgi.services_<ver>.jarcd C:\equinox
java -jar org.eclipse.osgi_<ver>.jar -console
osgi> install file:javax.servlet_2.4.jar
osgi> install file:org.apache.commons.logging_1.0.4.jar
... 安裝其餘 JAR ...
osgi> ss # 驗證狀態,應顯示 INSTALLED
osgi> start <bundleId> # 逐個啟動,核心框架為 0 已 ACTIVE
osgi> ss # 確認全部 ACTIVE
瀏覽器訪問 https://localhost/helloworld.html,顯示「Hello from helloworld.html」即成功。Jetty 以 OSGi HTTP Service 形式運行,靜態資源與 Servlet 均由 Bundle 註冊處理。
bridge.war 內含 org.eclipse.equinox.servletbridge.BridgeServlet,啟動時在 Tomcat 建立 Equinox 容器,攔截請求並委派給 OSGi HTTP Service 處理。Tomcat 提供 Servlet 容器與監聽端口,Equinox 提供模組化運行時,兩者協作。
bridge.war,啟動驗證 https://localhost:8080/bridge/sp_test 顯示 BridgeServlet 就緒。Tomcat/webapps/bridge/WEB-INF/eclipse/plugins。osgi> 提示符。ss 確認應用 Bundle 已安裝,start <id> 啟動。https://localhost:8080/bridge/helloworld.html 驗證。部署後可直接呼叫以下 URL 管理平台(無需 SSH/控制台):
| 端點 | 功能 |
|---|---|
/bridge/sp_deploy | 複製平台內容至工作目錄 |
/bridge/sp_undeploy | 刪除工作目錄副本 |
/bridge/sp_redeploy | 完整重置(停止→卸載→部署→啟動) |
/bridge/sp_start | 啟動已部署平台 |
/bridge/sp_stop | 停止平台 |
/bridge/sp_test | 健康檢查 |
本系列涵蓋:
OSGi 起源嵌入式領域,但服務端模組化才是其殺手級應用場景。Equinox 服務端版與 SpringSource dm Server 為將 OSGi 引入企業級 Web 開發提供了兩條成熟路徑。掌握上述部署模式,即可在現有 Java 基礎設施上平滑導入模組化架構。