成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基于OSGi和Spring開發Web應用

開發 后端 前端
本文通過一個簡單實例,介紹如何利用Spring-DM開發基于OSGi和 Spring架構的Web應用,同時探討其中用到的關鍵技術及其基本思想。

作為一個新的事實上的工業標準,OSGi 已經受到了廣泛的關注, 其面向服務(接口)的基本思想和動態模塊部署的能力, 是企業級應用長期以來一直追求的目標。Spring 是一個著名的 輕量級 J2EE 開發框架,其特點是面向接口編程和非侵入式的依賴注入。將 OSGi 和 Spring 結合能充分發揮二者各自的特長,更好地滿足企業級應用開發的需求。Spring 開發組織在 2008 年發布了將 OSGi 和 Spring 結合的***個版本:Spring-DM。本文通過一個簡單實例,介紹如何利用 Spring-DM 開發基于 OSGi 和 Spring 架構的 Web 應用,同時探討其中用到的關鍵技術及其基本思想。

51CTO編輯推薦:OSGi入門與實踐全攻略

開發一個簡單的OSGi Web應用實例

一個簡單的 Web 應用

我們寫一個簡單的 Web 應用 compute.html :計算兩個數字的和或乘積。如下圖所示:

圖 1. 一個簡單例子

為了體現 OSGi bundle 的動態部署能力,我們寫兩個 service bundle,其中一個計算兩個數字的和(稱為 add bundle),另外一個計算兩個數字的積(稱為 multiply bundle)。 當我們點擊“Compute”按鈕的時候,如果此時 add bundle 被部署,則頁面將返回兩個數字的和,否則如果此時 multiply bundle 被部署,則頁面將返回兩個數字的積。開發環境準備

1.下載 Eclipse 3.4

2.獲取所有 OSGi, Equinox 和 Spring 的插件, 如下圖所示:

 

1.打開 Eclipse, 設置 target platform 為上述插件集合

基本模塊設計

該應用主要包含兩個層次: 服務層和 Web 層。Web 層基于 Spring-MVC 實現,包含處理 Web訪問相關的 bundle(本例中只有一個)。服務層包含處理數字計算的 bundle,本例中包含一個聲明服務接口的 compute interface bundle 和兩個實現該服務接口的 bundle :add bundle 和 multiply bundle。基本模塊結構如下圖所示:

圖 3. 基本框架

模塊程序實現

Step 1 :實現 Service Layer

服務層的三個 OSGi bundle 實現完畢之后如下圖所示 :

圖 4. 服務層


其中 com.zxn.example.service.compute 是聲明服務接口的 bundle。com.zxn.example.service.compute.add和com.zxn.example.service.compute.multiply 是實現了服務接口的兩個 bundle。

1.com.zxn.example.service.compute

聲明一個 Compute 接口,其中包含一個接口方法 computeNums(),如下圖所示 :


圖 5. 服務層接口 bundle

1.com.zxn.example.service.compute.add

bundle com.zxn.example.service.compute.add 的基本程序結構如下圖所示:

圖 6. 接口實現 bundle :add

在該 add bundle 中,添加一個Add類,實現Compute接口,如下圖所示:


圖 7. 接口實現代碼 :Add 類

 

注意到我們在 META-INF 下建了一個 spring 目錄,并且添加了一個 computeAdd-context.xml 文件。系統啟動時,Spring 將利用該xml文件創建一個 bean 實例,并把該 bean 輸出為一個 OSGi service,如下圖所示 :


圖 8. Spring 聲明文件 :computeAdd-context.xml
 

該xml文件中,osgi : service是 Spring-DM 輸出 OSGi service 的標記,其中的 interface屬性標明了該 service 實現的服務接口。

1.com.zxn.example.service.compute.multiply

按照與add bundle 同樣的方法,實現 multiply bundle,如下圖所示:


圖 9. 接口實現代碼:Multiply 類

#p#

類似的,添加一個 computeMultiply-context.xml 輸出 OSGi service,如下圖所示 :
圖 10. Spring 聲明文件:computeMultiply-context.xml
Step 2 :實現 Web Layer
Web 層只包含一個 bundle:com.zxn.example.web,采用 Spring-MVC 和 OSGi 構建,基本程序結構如下圖所示

圖 11. Web Layer 程序結構

 
 

ComputeControler.java
該JAVA類實現了 org.springframework.web.servlet.mvc.Controller,是本 web應用中核心的 servlet,負責接受并處理 web 請求。該類調用 ComputeServiceRef 的方法實現業務邏輯。該類關鍵的方法是 handleRequest(…), 如下圖所示 :

圖 12. 核心 servlet 類

 
 

ComputeServiceRef.java
該 JAVA 類負責引用部署的 service bundle 完成最終計算,其中的 computeService 由 Spring 根據 OSGi 中實際部署的 service 進行注入。本例中,實際部署的 service 可能是 add bundle 或者 multiply bundle。

需要特別注意的是,此處體現了 Spring-DM 的動態特性。OSGi 的動態部署能力使得 Spring 的動態服務注入成為可能。

圖 13. 服務消費類


HTTPContextResgistry.java
該 JAVA 類負責在 OSGi 環境中配置和注冊 HTTP 服務,其關鍵方法為 bean 初始化時調用的 init( ) 方法。


圖 14. 在 OSGi 環境中注冊 HTTP 服務


該 init 方法中,第六行的 getHTTPService(…) 調用 OSGi 的 ServiceTracker 來獲取 OSGi環境中注冊的 HTTP 服務的引用,如下圖所示:


圖 15. 使用 ServiceTracker 獲取 HTTP 服務


computeWeb-context.xml
該 xml 文件主要用于配置 HTTPContextResgistry bean 類,以及導入對 Compute 服務接口的引用。標記 osgi : reference 用于聲明要導入的服務接口,其 interface 屬性標明了該接口的定義,本例中為 com.zxn.example.service.compute.Compute 接口。


圖 16. Spring 聲明文件:導入服務接口


computeWeb-Dispatcher.xml
該 xml 文件用于配置 ComputeControler bean類。


圖 17. Spring 聲明文件:配置核心 servlet 類

#p#

運行程序
以往開發 J2EE 應用通常需要將應用服務器的 runtime 集成到開發環境中才能進行程序調試,非常麻煩。基于 OSGi 的應用完全可以脫離應用服務器運行,這使得程序開發和調試變得非常容易,直接在 Eclipse 中調試運行就可以。我們在 Eclipse 中將程序運行起來,如下圖所示:
圖18. 運行 OSGi 程序
從上圖中看到,我們同時選擇部署了 add bundle 和 multiply bundle,利用 OSGi console 察看如下:
圖 19. 察看部署的 OSGi bundle
當 OSGi 環境中同時部署有多個服務接口的實現 bundle 時,OSGi 會選擇一個默認的 bundle提供服務。本例中,Spring 會默認注入 add bundle。我們通過 web 訪問 compute.html 頁面:
圖 20. 訪問頁面


點 Compute 按鈕之后,結果頁面如下:
圖 21. 訪問結果


可以看出,是 add bundle 提供了計算服務。下面我們通過命令 <stop 76> 來停止 add bundle的服務:
圖 22. 停止 add bundle
圖 23. add bundle 狀態變為 RESOLVED
重新訪問 compute.html 頁面,結果得到的是兩個數字的乘積。可以看出,是 multiply bundl
提供了計算服務。如下圖所示:
圖 24. 再次訪問頁面

小結

作為當前頗具生命力的兩個標準和框架,OSGi 和 Spring 已經初步融合在一起。二者的結合,為開發企業級的 Web 應用同時提供了巨大的靈活性和動態部署能力。本文通過一個簡單的例子,描述如何開發一個基于 OSGi 和 Spring 的 Web 應用,并說明了開發過程中涉及到的技術關鍵點。

【編輯推薦】

  1. 初探Java企業級開源框架OSGi
  2. Java代碼的靜態編譯和動態編譯中的問題比較
  3. 成為Java高手的25個學習要點
責任編輯:彭凡 來源: IBM
相關推薦

2010-04-07 08:55:00

OSGiSpring

2009-10-15 15:12:39

Equinox服務器端Equinox

2009-09-28 13:13:16

設置Spring DM

2009-06-11 09:20:15

GlassFish是什OSGi

2009-06-18 15:24:08

Spring OSGi

2010-08-13 08:59:58

Rails

2009-09-27 09:29:56

OSGi和SpringSpring動態模型Spring DM

2009-10-22 11:03:20

OSGi Web應用程

2009-10-19 14:14:19

OSGi Web應用

2009-03-02 09:15:13

OSGiJavaJ2EE

2009-06-01 10:28:03

SpringOSGi整合

2009-10-29 09:52:55

OSGi

2009-10-09 13:42:56

Spring DataSpring DM

2012-06-25 11:47:14

ibmdw

2009-01-03 14:57:19

ibmdwLotusWeb2.0

2013-11-22 11:03:45

GoogleWeb開發工具

2009-06-23 17:54:41

OSGi與JSF

2009-07-09 09:18:50

Spring Tool

2016-07-29 13:47:05

RethinkDBWeb

2009-07-22 14:50:54

ibmdwWeb2.0Apache
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色三级免费网站 | 国产黄色在线 | 亚洲精品久久久久久国产精华液 | 欧美一级在线 | 久久综合av | 欧美大片在线观看 | 国产激情偷乱视频一区二区三区 | 中文字幕在线网 | 精品影视| 久久亚洲欧美日韩精品专区 | 日韩一级欧美一级 | 亚洲精品视频一区 | 欧美激情在线一区二区三区 | 国产精品久久久久久一区二区三区 | 久久免费香蕉视频 | 男女免费在线观看视频 | 国产精品视频一 | 黄一区二区三区 | 国产精品色 | 极品粉嫩国产48尤物在线播放 | 国产内谢 | 一级a性色生活片久久毛片 午夜精品在线观看 | 久久久久亚洲精品国产 | 成人免费视频在线观看 | 欧美日韩精品免费 | 91av在线免费| 国产在线观看 | 国产欧美日韩综合精品一区二区 | 福利视频网址 | 欧美在线一区二区三区 | 最新高清无码专区 | 性一交一乱一透一a级 | 亚洲国产精品福利 | 成人精品 | 一区二区三区福利视频 | 丁香婷婷综合激情五月色 | 人人干人人草 | 久久乐国产精品 | 四虎影院在线观看av | 国产高清视频在线观看 | 激情毛片 |