2012-09-07 20 views
4

我'開始使用ServiceMix和駱駝,我已經運行了很多例子。要使用ServiceMix,我的項目必須是OSGi包?

看來OSGi的例子可以通過熱部署或通過控制檯部署在ServiceMix中,但我不知道如何部署不是OSGI的項目。可以做到嗎?

例如,我正在查看來自Camel 2.10.0的示例項目camel-example-cxf-proxy。我做了一些改動,現在我想在ServiceMix中加載它。如果我複製/粘貼到部署目錄,它會被加載,但當我嘗試通過osgi運行它時:start id會失敗。

但是,如果我作爲一個獨立的IDE運行它,它運行得很好,我可以通過SoapUI發送和接收請求。

當我完成這些例子時,我想在eclipse中創建自己的項目,並在IDE和ServiceMix中進行測試。我還沒有真正理解OSGi的優點。所以我不太會強迫我的項目使用OSGi。

我的主要問題是:我可以在servicemix中部署非OSGi不符合JBI的項目嗎?像camel-example-cxf-proxy。如果是,我該怎麼辦?如果不是,我如何才能使用camel-example-cxf-proxy?

謝謝:)

回答

5

的Apache ServiceMix的,它使用的Apache Karaf作爲其內核,支持可插拔部署單元。雖然OSGi是主要單位。

您可以部署JBI構件(例如,JBI被用作Apache ServiceMix 3.x的部署單元)。因此,我們將此作爲遷移路徑在SMX 4.x中運行JBI。

也可以部署純文本WAR文件。例如,您可以將.war文件放在deploy目錄中。如果你從shell進行部署,你需要在部署者前加上war,這樣才能知道使用war部署者。

有關於這裏 http://fusesource.com/docs/esbent/7.0/esb_deploy_osgi/UrlHandlers.html

各種可插拔部署者例如安裝使用Maven一個Apache Wicket的WAR例如,你可以從shell做一些文檔:

osgi:install war:mvn:org.apache.wicket/wicket-examples/1.4.7/war?Web-ContextPath=wicket 

Apache文檔有關部署主要記錄在Apache Karaf http://karaf.apache.org/manual/2.2.9/users-guide/deployer.html

現在部署OSGi應用程序可能會有點痛苦組裝。這就是爲什麼FuseSource創建FAB使其更容易。我對此進行了一些博客,其中涉及到視頻和更多素材:http://www.davsclaus.com/2012/08/osgi-deployment-made-easy-with-fab.html

使用FAB,您可以直接部署常規Maven項目,而不會產生任何OSGi痛苦。

+0

感謝您的信息!我正在嘗試FAB和Maven插件,看看我能否解決我的問題。我試圖通過將maven生成的jar文件複製到deploy目錄來加載camel-example-cxf-proxy,但是當我嘗試啓動該捆綁軟件時,得到: 「org.osgi.framework.BundleException:未解析的約束in package org.apache.camel.camel-example-cxf-proxy [259]:Unab le解析259.0:缺少需求[259.0]包;(&(package = META-INF.cxf)(version> = 2.6。 0)(!(version> = 3.0.0)))「 我不知道如何解決這個問題,但是這個包不會啓動。 –

+1

Apache ServiceMix 4.4.x不*支持Camel 2.10。它只支持Camel 2.8。 ServiceMix 4.5(還有待發布)將支持Camel 2.10和ActiveMQ 5.7(我們需要首先發布) –

+0

感謝您的回答克勞斯易卜生,這對我們幫助很大。 –

3

如果你的項目是Maven項目,你可以嘗試:

mvn install 

然後開始你的ServiceMix,並在ServiceMix的命令行:

install mvn:groupId/artifactId/version 

這會提示一個包ID。然後,中庸之道啓動包:

start <bundle_id> 

你可以用命令「列表」檢查你的包的狀態

+0

我想這個解決辦法,但我似乎無法啓動包。它顯示了異常「org.osgi.framework.BundleException:捆綁org.apache.camel.camel-example-cxf-proxy [259]中未解決的約束:Unab le解析259.0:缺少需求[259.0]包;( &(package = META-INF.cxf)(version> = 2.6.0)(!(version> = 3.0.0)))「 –

+0

META-INF中似乎沒有配置文件,或者您正在使用非兼容版本 – yodamad

+0

感謝您的回答,因爲事實證明我使用的是不支持的組合:Camel 2.10和ServiceMix 4.4.x –

1

該項目必須是要安裝在servicemix/karaf中的軟件包。所以在OSGi中製作駱駝項目的步驟如下。

  1. 使用Maven插件捆綁在POM和配置它導入/如果有必要導出所需的軟件包。

  2. 確保您的駱駝上下文是以OSGi可以啓動的方式定義的。這要麼在捆綁的激活器中,要麼在正確位置的彈簧配置中,或者在正確位置使用藍圖配置。

詳情請參見我的兩個karaf教程:

CXF:http://www.liquid-reality.de/x/EoBk

駱駝:http://www.liquid-reality.de/x/G4Bk

+0

這是不正確的,你可以部署一個WAR文件,或者使用一個包裝來部署一個非OSGi包(例如一個普通的JAR)。然而,OSGi是SMX的主要部署單元,因此大多數人使用OSGi部署模型。 –

+0

當然你可以部署一個戰爭或一個普通的罐子。但我認爲解釋讓人們感到困惑的不僅僅是它的幫助:-) –

相關問題