2012-09-07 19 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

当然你可以部署一个战争或一个普通的罐子。但我认为解释让人们感到困惑的不仅仅是它的帮助:-) –

相关问题