首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

基於 OSGi 與 Spring 的動態 Web 應用開發實戰

     編輯:Java 相關知識

前言:OSGi 與 Spring 的強強聯手

OSGi 作為事實上的工業標準,其面向服務(介面)的核心思想與動態模塊部署能力,是企業級應用長期追求的目標。Spring 以面向介面編程與非侵入式依賴注入聞名。兩者結合能充分發揮各自優勢,更好滿足企業級開發需求。Spring 團隊 2008 年發布首個整合版本 Spring-DM。本文通過一個簡單實例,介紹如何利用 Spring-DM 開發基於 OSGi 與 Spring 架構的 Web 應用,並探討關鍵技術與基本思想。

開發簡單 OSGi Web 應用實例

應用場景:動態計算服務

構建一個簡單 Web 頁面 compute.html,計算兩個數字的和或乘積。為體現 OSGi Bundle 動態部署能力,編寫兩個 Service Bundle:add bundle 計算和,multiply bundle 計算積。點擊「Compute」按鈕時,若 add bundle 已部署則返回和,若 multiply bundle 已部署則返回積。

簡單例子截圖

開發環境準備

  1. 下載 Eclipse 3.4
  2. 獲取 OSGi、Equinox、Spring 所有插件並設置 Target Platform

插件列表

基本模塊設計

應用包含兩層:服務層與 Web 層。Web 層基於 Spring-MVC,包含處理 Web 訪問的 Bundle(本例僅一個)。服務層包含數字計算 Bundle:一個聲明服務介面的 compute interface bundle,兩個實現介面的 Bundle(add、multiply)。結構如下:

基本框架圖

模塊程序實現

Step 1:實現 Service Layer

三個 Service Bundle 結構:

服務層結構

  • com.zxn.example.service.compute:聲明 Compute 介面,含 computeNums() 方法。
  • com.zxn.example.service.compute.add:實現 Add 類,於 META-INF/spring/computeAdd-context.xml 以 <osgi:service> 導出 OSGi Service。
  • com.zxn.example.service.compute.multiply:同理實現 Multiply 類與 computeMultiply-context.xml。

介面 Bundle

Add Bundle 結構

Add 類代碼

computeAdd-context.xml

Multiply 類代碼

Step 2:實現 Web Layer

Web Bundle:com.zxn.example.web,採 Spring-MVC + OSGi 構建。

Web Layer 結構

  • ComputeController.java:實現 Controller,核心 Servlet,處理 Web 請求,調用 ComputeServiceRef 完成業務邏輯,關鍵方法 handleRequest()。
  • ComputeServiceRef.java:引用部署的 Service Bundle 完成計算,computeService 由 Spring 根據 OSGi 實際部署的 Service 動態注入。此處體現 Spring-DM 動態特性:OSGi 動態部署使 Spring 動態服務注入成為可能。
  • HTTPContextRegistry.java:配置註冊 HTTP 服務,init() 方法中用 ServiceTracker 獲取 OSGi 環境中註冊的 HTTP 服務引用。
  • computeWeb-context.xml:配置 HTTPContextRegistry Bean 並用 <osgi:reference> 導入 Compute 服務介面。
  • computeWeb-Dispatcher.xml:配置 ComputeController Bean。

Controller 代碼

ComputeServiceRef 代碼

HTTPContextRegistry 代碼

ServiceTracker 獲取 HTTP 服務

computeWeb-context.xml

computeWeb-Dispatcher.xml

運行程序與動態驗證

基於 OSGi 的應用可脫離應用伺服器直接在 Eclipse 中調試運行。啟動後同時部署 add 與 multiply bundle,OSGi Console 顯示狀態。OSGi 會選擇一個預設 Bundle 提供服務(本例預設注入 add)。訪問頁面點擊 Compute 返回和。執行 <stop 76> 停止 add bundle,狀態變為 RESOLVED,再次訪問則返回乘積,證明 multiply bundle 接管服務。

運行 OSGi 程序

查看部署的 Bundle

訪問頁面

訪問結果(和)

停止 add bundle

add bundle 狀態變更

再次訪問結果(積)

小結

OSGi 與 Spring 初步融合,為企業級 Web 應用提供極大靈活性與動態部署能力。本文通過簡單例子描述開發流程並說明關鍵技術點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved