OSGI實戰(1)-初識OSGI-到底什麼是OSGI__osgi

來源:互聯網
上載者:User
目前,業內關於OSGI技術的學習資源或者技術文檔還是很少的。我在某寶網搜尋了一下“OSGI”的書籍,結果倒是有,但是種類少的可憐,而且幾乎沒有人購買。
因為工作的原因我需要學習OSGI,所以我不得不想盡辦法來主動學習OSGI。我將用文字記錄學習OSGI的整個過程,通過整理書籍和視頻教程,來讓我更加瞭解這門技術,同時也讓需要學習這門技術的同志們有一個清晰的學習路線。

我們需要解決一下幾問題:
1.如何正確的理解和認識OSGI技術。

我們從外文資料上或者從翻譯過來的資料上看到OSGi解釋和定義,都是直譯過來的,但是OSGI的真實意義未必是中文直譯過來的意思。OSGI的解釋就是Open Service Gateway Initiative,直譯過來就是“開放的服務入口(網關)的初始化”,聽起來非常費解,什麼是服務入口初始化。

所以我們不去直譯這個OSGI,我們換一種說法來描述OSGI技術。

我們來回到我們以前的某些開發情境中去,假設我們使用SSH(struts+spring+hibernate)架構來開發我們的Web項目,我們做產品設計和開發的時候都是分模組的,我們分模組的目的就是實現模組之間的“解耦”,更進一步的目的是方便對一個項目的控制和管理。
我們對一個項目進行模組化分解之後,我們就可以把不同模組交給不同的開發人員來完成開發,然後專案經理把大家完成的模組集中在一起,然後拼裝成一個最終的產品。一般我們開發都是這樣的基本情況。

那麼我們開發的時候預計的是系統的功能,根據系統的功能來進行模組的劃分,也就是說,這個產品的功能或客戶的需求是劃分的重要依據。

但是我們在開發過程中,我們模組之間還要彼此保持聯絡,比如A模組要從B模組拿到一些資料,而B模組可能要調用C模組中的一些方法(除了公用底層的工具類之外)。所以這些模組只是一種邏輯意義上的劃分。

最重要的一點是,我們把最終的項目要去部署到tomcat或者jBoss的伺服器中去部署。那麼我們啟動伺服器的時候,能不能關閉項目的某個模組或功能呢。很明顯是做不到的,一旦伺服器啟動,所有模組就要一起啟動,都要佔用伺服器資源,所以關閉不了模組,假設能強制拿掉,就會影響其它的功能。

以上就是我們傳統模組式開發的一些局限性。

我們做軟體開發一直在追求一個境界,就是 模組之間的真正“解耦”、“分離”,這樣我們在軟體的管理和開發上面就會更加的靈活,甚至包括給客戶部署項目的時候都可以做到更加的靈活可控。但是我們以前使用SSH架構等架構模式進行產品開發的時候我們是達不到這種要求的。

所以我們“架構師”或頂尖的技術高手都在為模組化開發努力的摸索和嘗試,然後我們的OSGI的技術規範就應運而生。

現在我們的OSGI技術就可以滿足我們之前所說的境界:在不同的模組中做到徹底的分離,而不是邏輯意義上的分離,是物理上的分離,也就是說在運行部署之後都可以在不停止伺服器的時候直接把某些模組拿下來,其他模組的功能也不受影響。

由此,OSGI技術將來會變得非常的重要,因為它在實現模組化解耦的路上,走得比現在大家經常所用的SSH架構走的更遠。這個技術在未來大規模、高訪問、高並發的Java模組化開發領域,或者是項目正常化管理中,會大大超過SSH等架構的地位。

現在主流的一些應用伺服器,Oracle的weblogic伺服器,IBM的WebSphere,JBoss,還有Sun公司的glassfish伺服器,都對OSGI提供了強大的支援,都是在OSGI的技術基礎上實現的。有那麼多的大型廠商支援OSGI這門技術,我們既可以看到OSGI技術的重要性。所以將來OSGI是將來非常重要的技術。

但是OSGI仍然脫離不了架構的支援,因為OSGI本身也使用了很多spring等架構的基本控制項(因為要實現AOP依賴注入等功能),但是哪個項目又不去依賴第三方jar呢。



2.OSGI技術對我們項目的開發有什麼協助。

(1)項目展示
接下來我們同過項目代碼來展示一下OSGI的魅力:
我們先不要去急著理解如何使用OSGI,我們通過一個項目先來看一下OSGI的效果。
(以下工程代碼是網上教學視頻中的範例,源碼我這裡是沒有的)
(提前說一下:我們要學習的重點就是我們這個購物網站如何結合OSGI技術,使得項目更加的靈活可控,而購物網站本身並不是重點。)


首先在Eclipse中先開啟我們的單伺服器版本的項目:

啟動成功:




這是一個Web項目,我們開啟瀏覽器看一下效果:

可以看出是一個網上購物的項目。

我們來看一下我們基於OSGI技術的項目和我們一般的項目有什麼區別。
首先介紹一下這個項目的模組:

1.大類展示


2.小類展示(大類的子產品)

點進去之後就是產品的具體資訊



3.購物車
沒買東西是空的:

買完之後:



4.商品管理(上架、下架)



可以看到,這個項目和我們平常開發的項目沒有什麼不同(我知道介面很簡陋= =),重點是它的啟動和載入過程。


(2)關於伺服器
我們是通過動態載入,也就是“熱部署”來啟動我們的項目的。就是說,我們這個項目把它放在Web容器中之後,我們可以將某些功能給它拿下來,而且拿下來的時候不會對其他模組造成影響。

我們以前運行tomcat的時候,啟動一下伺服器,將Web項目一次性裝載完畢,控制台會出現類似這種資訊:


但是我們啟動這個項目的時候並不是這樣:


那麼我們沒有用tomcat和jBoss,那是如何部署和啟動Web項目的呢。不可能沒有Web伺服器中介軟體的啊。這裡告訴大家,OSGI技術裡面也是內嵌了一個Web伺服器的,就是jetty。


我們開啟這個項目的Run Configuration配置視窗,看一下運行這個項目所需要的外掛程式包:


可以看到,除了一些Web項目需要的jar包,還是有jetty的存在的。所以用到的伺服器是jetty,不再是tomcat。


大家可能還是比較熟悉tomcat,對於jetty不是太熟悉,那麼我們簡單介紹一下jetty:
jetty也是一個比較優秀的Web容器,在某些效能方面要比tomcat強大的多(如高並發,長串連)。而且它的整個結構比tomcat輕巧很多(tomcat更臃腫),具體區別大家可以去網上自己看一下。


(3)運行模式和外掛程式
我們接下來正式看一下此項目在OSGI下的運行模式:
我們在啟動的時候,載入了四個模組,分別是:

按照模組化的思想他們就是四個對應的功能模組。
他們對應的四個功能模組的工程代碼我們可以在Eclipse中看到:



我們看一下我們的啟動配置(依然開啟是Run Configuration配置視窗):


配置分為“WorkSpace”和“Target Platform”,分別是我們工作空間(我們自己寫的項目模組和工具類)的外掛程式和運行平台(一些依賴jar的配置)的外掛程式,兩者結合啟動我們的項目就會正常運行。

我們啟動項目之後,在控制台輸入指令“ss”,就會出現我們所有載入的外掛程式的運行情況:


一啟動的時候,它會首先載入Eclipse的OSGI外掛程式(Eclipse本身也是一種OSGI的容器):

我們開啟我們的Eclipse安裝目錄,然後找到plugins檔案夾,可以看到Eclipse所有的外掛程式:

可以看到有檔案夾形式的,有jar形式的外掛程式。

我們怎麼去理解外掛程式呢。
外掛程式其實就是被開發工具或OSGI容器管理和配置起來的jar包。  

我們隨便開啟一個檔案夾類型的外掛程式,可以看到:

可以看到裡面除了lib之外還有其它東西,然後有一個“OSGI-INF”檔案夾。且不管它是什麼,這都足以說明我們的Eclipse就是一個OSGI容器。

(4)熱部署和暖開機
我們接下來回到重點,在我們啟動的過程中,我們不停止運行,然後去停掉其中的一個模組:

假如我們要停掉“管理”模組:

也就是停掉id為22的外掛程式

結果:


然後重新整理我們的網站首頁面:

發現我們的“管理”模組消失了!

這個模組的消失並不是javascript的技術,而是一種伺服器技術,我們是通過伺服器內部把它動態卸載掉的。

我們的管理模組去掉之後,網站的其它功能不受任何影響。至此我們的伺服器沒有進行任何的暫停或關閉。

我們再停掉“購物車”模組:

效果:

其它模組依舊不受影響。

我們關閉了兩個模組,現在輸入ss看一下所有外掛程式和模組的運行情況:

可以看到我們的兩個模組處於RESOLVED狀態,也就是待解決狀態。

當然我們也可以將我們的模組在伺服器開啟狀態下部署上去:
如我們啟動購物車模組:


發現購物車回來了:


這就是所謂的熱部署,即是這個項目把它放在Web容器中之後,我們可以將某些功能給它拿下來,而且拿下來的時候不會對其他模組造成影響。


通過購物網站這個項目讓大家真實的感受一下OSGI這個技術在項目開發和管理的一些強大的功能。

想進一步瞭解更多關於OSGI的知識可以查看以後的總結文章。

轉載請註明出處:http://blog.csdn.net/acmman/article/details/50848595

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.