要使用ServiceMix,我的项目必须是OSGi包吗?

时间:2012-09-07 14:35:43

标签: apache apache-camel osgi apache-servicemix

我开始使用ServiceMix和Camel,我已经通过了很多例子。

OSGi的示例似乎可以通过热部署或通过控制台部署在ServiceMix中,但我不知道如何部署不是OSGI的项目。可以吗?

例如,我正在查看Camel 2.10.0中名为camel-example-cxf-proxy的示例项目。我做了一些改动,现在我想在ServiceMix中加载它。如果我复制/粘贴到部署目录,它会被加载,但是当我尝试通过osgi运行它时:启动id失败。

但是如果我作为一个独立的IDE从IDE运行它运行得很好,我可以通过SoapUI发送和接收请求。

当我完成这些示例时,我想在eclipse中创建自己的项目,并在IDE和ServiceMix中进行测试。我还不太了解OSGi的优势。所以我不太习惯在我的项目中使用OSGi。

我的主要问题是:我可以在servicemix中部署非OSGi非JBI兼容项目吗?像camel-example-cxf-proxy之类的东西。如果是,我该怎么办?如果不是,我怎么能OSGi-fy camel-example-cxf-proxy?

谢谢:)

3 个答案:

答案 0 :(得分:5)

Apache ServiceMix,它使用Apache Karaf作为其内核,支持可插拔部署单元。虽然OSGi是主要单位。

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

也可以部署普通的WAR文件。例如,您可以在deploy目录中删除.war文件。如果从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痛苦。

答案 1 :(得分:3)

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

mvn install

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

install mvn:groupId/artifactId/version

这将提示包ID。然后,juste启动捆绑包:

start <bundle_id>

您可以使用命令“list”

检查捆绑包的状态

答案 2 :(得分:1)

项目必须是要在servicemix / karaf中安装的捆绑包。因此,使驼峰项目在OSGi中工作的步骤如下。

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

  2. 确保您的驼峰上下文以OSGi可以启动的方式定义。这可以是捆绑的激活器,也可以是正确位置的弹簧配置,也可以是正确位置的蓝图配置。

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

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

    骆驼:http://www.liquid-reality.de/x/G4Bk