Apache 要使用ServiceMix,我的项目必须是OSGi捆绑包?

Apache 要使用ServiceMix,我的项目必须是OSGi捆绑包?,apache,apache-camel,osgi,apache-servicemix,Apache,Apache Camel,Osgi,Apache Servicemix,我已经开始使用ServiceMix和Camel,并且已经运行了许多示例 OSGi示例似乎可以通过热部署或控制台部署到ServiceMix中,但我不知道如何部署一个非OSGi的项目。能做到吗 例如,我正在查看Camel 2.10.0中名为Camel example cxf proxy的示例项目。我做了一些修改,现在我想把它加载到ServiceMix中。如果我复制/粘贴到部署目录,它会被加载,但当我尝试通过osgi:start-id运行它时,它会失败 但是,如果我从IDE作为独立运行它,它运行得很好

我已经开始使用ServiceMix和Camel,并且已经运行了许多示例

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示例cxf代理。如果是,我怎么做?如果没有,我如何在OSGi中使用camel示例cxf代理


谢谢:)

如果您的项目是maven项目,您可以尝试:

mvn install
然后启动servicemix,并在servicemix命令行中:

install mvn:groupId/artifactId/version
这将提示一个bundle ID。然后,只需启动bundle:

start <bundle_id>
开始

您可以使用命令“list”检查捆绑包的状态,该命令使用ApacheKaraf作为内核,支持可插入部署单元。虽然OSGi是主要的单元

您可以部署JBI工件(例如JBI被用作ApacheServiceMix3.x的部署单元)。因此,我们将其作为在SMX4.x中运行JBI的迁移路径

也可以部署普通WAR文件。例如,您可以在部署目录中删除一个.war文件。如果从shell部署,则需要在部署器前面加上war前缀,以便它知道如何使用war部署器

这里有一些关于各种可插拔部署器的文档

例如,要使用Maven安装Apache Wicket WAR示例,您可以从shell执行以下操作:

osgi:install war:mvn:org.apache.wicket/wicket-examples/1.4.7/war?Web-ContextPath=wicket
关于deployer的Apache文档主要记录在ApacheKaraf中

现在,部署OSGi应用程序可能有点麻烦。这就是FuseSource创建FAB以使其更容易的原因。我在博客上写了一点,其中提到了视频和更多材料:


使用FAB,您可以直接部署常规的Maven项目,而不需要任何OSGi方面的麻烦。

该项目必须是一个捆绑包,才能安装在servicemix/karaf中。因此,让camel项目在OSGi中工作的步骤如下

  • 在pom中使用maven bundle插件,并在必要时将其配置为导入/导出必要的包

  • 确保您的camel上下文是以OSGi可以启动的方式定义的。这要么在捆绑包的激活器中,要么在正确位置的spring配置中,要么在正确位置的blueprint配置中

  • 有关详细信息,请参阅我的两个karaf教程:

    CXF:


    Camel:

    这不是真的,您可以部署WAR文件,或者使用wrap部署非OSGi捆绑包(例如普通JAR)。然而,OSGi是SMX中的主要部署单元,因此大多数人使用OSGi部署模型。但我认为解释这一点让人困惑,而不是帮助:-)我尝试了这个解决方案,但似乎无法启动捆绑。它向我显示了异常“org.osgi.framework.BundleException:bundle org.apache.camel.camel-example-cxf-proxy[259]:无法解析259.0:缺少的需求[259.0]包;(&(package=META-INF.cxf)(版本>=2.6.0)(!(版本>=3.0.0))”似乎META-INF中缺少配置文件,或者您使用了不兼容的版本ANK you作为答案,因为事实证明我使用了不受支持的组合:Camel 2.10和ServiceMix 4.4.x hanks作为信息!我正在尝试FAB和maven插件,看看是否可以解决我的问题。我试图通过将maven生成的jar文件复制到deploy目录来加载camel示例cxf代理,但当我尝试启动捆绑包时,我得到了这样一个信息:“org.osgi.framework.BundleException:bundle org.apache.camel.camel-example-cxf-proxy[259]中未解析的约束:无法解析259.0:缺少需求[259.0]包(&(package=META-INF.cxf)(版本>=2.6.0)(!(版本>=3.0.0))“我不知道如何更正此问题,但该捆绑包不会启动。Apache ServiceMix 4.4.x不支持Camel 2.10。它只支持Camel 2.8。ServiceMix 4.5(仍将发布)将支持Camel 2.10和ActiveMQ 5.7(我们需要先发布)谢谢你的回答克劳斯·易卜生,这帮了大忙。