2015-03-19 174 views
0

在Apache Karaf上搜索了很多東西之後,我瞭解到它用於測試和構建OSGI包。我還沒弄清楚如何處理Apache Karaf以及如何使用它。 I也不太瞭解OSGI包的需求。Apache Karaf和OSGI Bundle

而且我也想知道答案的我下面疑惑:

  1. exacltly是什麼阿帕奇karaf在簡單的話?
  2. 它解決了什麼目的?它可以用於解決日常的 算法問題嗎?在Karaf
  3. 我在哪裏可以找到好的教程的問題入手
  4. 是什麼的Apache Karaf,Apache的菲利克斯和Apache Maven的 以及它們是如何與OSGI的區別?

回答

3
  1. 的Apache Karaf是OSGi容器將運行OSGi的捆綁(標準罐使用OSGi清單)的基礎設施,Tomcat是一個Web容器使運行網絡應用程序的基礎設施。
  2. 不知道你的日常算法問題,但它解決了許多其他日常問題,因爲它的OSGi本質。爲此,你最好看看OSGi和它是關於什麼的。簡而言之:
    OSGi可以幫助您解決兩個主要問題,即高內聚和低耦合。 由於類加載器分離(它是一個圖形而不是樹),可以運行相同工件的多個版本。
    由於服務註冊表有可能有一個像體系結構的插件,其中一個應用程序可以監聽一個接口(服務)的多個實現
  3. 有很多附件,甚至圖書讓你開始你只需要谷歌它。或者看看在Apache Karaf文件和相應的Articles
    • 的Apache Maven的:這是一個構建系統它的存在來管理您的依賴關係的構建時間。
    • Apache Felix:這是一個OSGi框架實現(如Eclipse Equinox)。
    • Apache Karaf:就像OSGi容器中說的那樣,它解決了很多基礎結構問題,例如:日誌記錄。易於部署,易於配置以及更多。再次完整的棧,看看在documentation
4

要了解的Apache Karaf,你應該先了解OSGi的。

Java應用程序以Jar文件的形式部署爲它們的工件。如果應用程序依賴於其他jar文件,那麼這些jar必須存在於應用程序的類路徑中。當應用程序運行時,所需的類將根據需要加載並實例化。

如果您的應用程序部署在任何容器(例如:像tomcat這樣的web服務器)內,那麼容器遵循一些標準邏輯來加載或初始化您的應用程序。這涉及到加載類。要求程序中引用的類必須存在於應用程序的類路徑中(例如:war文件的web-inf目錄)。 如果容器在戰爭中找不到所需的類,它會查詢應用程序的父類加載器來查找類文件。 因此,這種方式使用普通的Java運行時處理多個分層類加載器。 這有一個問題,即根據部署的應用程序,多次加載同一個類。

歡迎來到OSGi。 在OSGi中,jar將被稱爲Bundle。 一個包看起來很像一個jar,但在其manifest.mf文件中有額外的頭文件。 標題提供了有關哪些軟件包由軟件包導出/導入的信息。 當您的應用程序想要使用任何庫jar文件時,您會在manidest的Import-package頭文件中提到所需的軟件包。當其他軟件包想要使用bundles中的軟件包時,必須使用Export-package標頭公開軟件包。

OSGi運行時查找這樣的頭並有效地處理類加載。所以,一個類只會使用它的jar的類加載器加載一次,並且您將從惱人的ClassNotFoundExceptions中解救出來。

OSGi是規範。它有一個可以在manifest.mf中使用的頭部列表。期。

Apache Felix和Eclipse equinox是這個規範實現的一小部分。

Apache卡拉夫是一個控制檯。控制檯有助於與任何應用程序進行交互。在這裏,應用程序是Apache Felix的OSGi運行時。 Karaf提供了很多與OSGi交互的命令。您可以使用其熱部署功能在運行時將新捆綁包部署到OSGi(無需重新啓動Karaf)。只需將包文件放入deploy文件夾即可完成。

隨着卡拉夫,你可以看到服務,包通過任何捆綁暴露。 Karaf提供了很多開箱即用的框架,比如spring,jetty server,logging utilities。

隨着卡拉夫你可以啓動,在運行時停止任何捆綁。總之,Karaf只是OSGi運行時的控制檯。

你可以編寫任何普通的java程序並使用OSGi。你只需要用bundle激活器來連接你的應用程序初始化邏輯。

Apache maven是一個構建工具。有了這個,你可以構建(準備jar工件)任何Java項目。

在使用OSGi時,您需要遵守manifest.mf語義。應根據需要導出和導入包。爲了幫助構建適當的manifest.mf,有一個'bnd'工具。這個工具分析你的應用程序的類路徑,並準備最終的OSGi包與適當的清單。

Apache Maven利用這個'bnd'工具和它的maven-bundle-plugin。 只需將此插件附加到項目的生命週期目標,即可完成。 Maven會爲你準備一個捆綁包。