Apache Karaf調研

一、名詞解釋

(一)OSGi

OSGi(Open Service Gateway Initiative),開放服務網關協議,是Java動態化模塊化系統的一系列規範。

基於Spring DM發展而來。

使用OSGi的基本目標:高度模塊化,高度解藕,SOA,好維護。

OSGi最重要的特性:

在Java中ClassLoader是非常重要的概念,而大家也知道,JVM本身在ClassLoader上並沒有提供非常強大的功能,比如模塊開發非常重要的模塊隔離ClassLoader的機制、版本加載機制等。OSGI基於JVM ClassLoader形成模塊隔離ClassLoader的機制,同時也增強了ClassLoader按版本加載、屬性過濾等多種功能。

Java和J2EE的類加載模型都是層次化的,只能委託給上一層類加載器;而OSGi類加載模型則是網絡圖狀的,可以在bundle間互相委託。這樣更合理,因爲bundle間的依賴關係並不是層次化的。

(二)Karaf

Karaf是2001年Apache旗下的一個開源項目,Karaf同時也是一個基於OSGi的運行環境,Karaf提供了一個輕量級的OSGi容器,可以用於部署各種組件,應用程序。

Karaf提供了很多特性用於幫助開發者和用戶更加靈活的部署應用,例如:熱部署,動態配置,幾種日誌處理系統,本地系統集成,可編程擴展控制檯,ssh遠程訪問,內置安裝認證機制等等。

(三)Bundle

即osgi中的模塊。最終在karaf容器中表現爲一個jar包。1個bundle對應1個OSGi ClassLoader。

Bundle之間類的共享:

通過 export package的方式實現的,在bundle的manifest中通過指定export package的方式將特定的package與其他的bundle共享。而引用其他bundle所暴露的package有兩種方式,第一是通過 import package的方式,第二種是通過required bundle的方式。

(四)模塊

一個模塊應該具有以下3個特性:

  • 自包含:一個模塊應該是一個業務邏輯的整體,它應該可以作爲一個獨立的整體被移動、安裝和卸載。模塊不是一個原子體,它可以包含多個更小的部分,但這些部分不能獨立存在。
  • 高內聚:一個模塊不應該做很多不相關的事情,它應該專注於1個業務邏輯的目標並盡全力實現這個目標。
  • 低耦合:一個模塊不應該關注其他模塊的內部實現,鬆散的聯繫允許我們去更改某個特定的模塊,而不會影響到其他的模塊。

而Java語言的Jar文件並不能完美的實現一個模塊這3個特性,它主要會遇到以下的3個問題:

  • 1、針對一個Jar文件,沒有對應的Java運行時的概念。Jar文件只有在開發和部署的時候有意義,而在JVM中,所有的Jar文件中的內容被簡單地聯繫在一起作爲一個單獨的全局的列表,這就是所謂的“Classpath”。這種類加載模式,使Jar文件在運行時是不可見的。
  • 2、Jar文件沒有標準的元數據信息去指明該Jar文件所需要的外部依賴文件列表,這樣我們就不能清楚的知道,該Jar文件需要和其他的那些Jar文件一起工作。另外,現在的Jar文件沒有版本信息,這樣,同一Jar文件的多個版本就不能同時被加載。
  • 3、Java沒有機制在不同的Jar文件中隱藏信息。

這3個問題,使Jar文件在模塊的“自包含”和“低耦合”這兩個特性上做的不好,從而使Java在模塊的“拆分人力”和“易於維護”這兩個優點上沒有好的表現,而更嚴重的是第2個問題,這使Java應用軟件存在難以處理的版本衝突問題。

(五)Feature

即一組bundle,其具備特定的功能。

(六)Blueprint

是OSGi的DI框架或OSGi依賴注入的標準,非常類似於spring上下文。以xml的方式構建應用。用來處理POJO對象的裝配,可以達到跨bundle訪問對象。使用blueprint上下文將xxService作爲一個OSGi服務發佈。

其有2個具體實現:Apache的Aries、Eclipse的Gemini。

包含的子標籤:bean、service、refrence、refrence-list等等。

(七)Configuration admin

OSGi容器包含一個非常好的配置規範:來自企業級規範的Config Admin服務。可以在bundle中自動部署配置文件。

基本上在Config Admin服務中的配置是一個字典,這個字典包含了屬性和他們的值。字典由持久性標識PID標識。PID就是一個簡單的字符串,它唯一標識了配置。

文件結尾是.cfg,則它認爲這是一個config admin資源,創建或更新由文件名確定的pid的Config Admin服務配置。

(八)CXF

CXF 框架是一種基於 Servlet 技術的 SOA 應用開發框架,要正常運行基於 CXF 應用框架開發的企業應用,除了 CXF 框架本身之外,還需要 JDK 和 Servlet 容器的支持。

CXF 繼承了 Celtix 和 XFire 兩大開源項目的精華,提供了對 JAX-WS 全面的支持,並且提供了多種 Binding 、DataBinding、Transport 以及各種 Format 的支持,並且可以根據實際項目的需要,採用代碼優先(Code First)或者 WSDL 優先(WSDL First)來輕鬆地實現 Web Services 的發佈和使用。

二、Karaf常用命令

(一)查看所有bundle啓動狀態

list或者bundle:list

(二)查看所有配置文件列表

config:list

注:配置文件所在路徑爲${KARAF_HOME}/etc/xx.cfg

(三)改變配置

config:edit ConfigApp
config:property-set title “A better title”
config:property-list
config:update

注:ConfigApp爲示例bundle的名稱

(四)啓動

karaf或者karaf.bat

(五)停止

shutdown或halt或logout或快捷鍵Ctrl+D
shutdown 10代表10min後關閉karaf

(六)獲取幫助

opt --help

注:opt代表具體的命令,如shutdown --help

(七)查看日誌

log:display或log:tail -n 20

注:日誌所在目錄爲${KARAF_HOME}/data/log

(八)添加、安裝、部署feature應用

feature:repo-add camel
feature:install deployer camel-blueprint aries-blueprint
feature:install webconsole

(九)停止、卸載應用

bundle:stop example.xml
bundle:uninstall example.xml

注:example.xml爲示例bundle名

(十)查看所有http服務列表

http:list

注:http端口配置文件位置爲${KARAF_HOME}/etc/org.ops4j.pax.web.cfg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章