在 Apache Servicemix 4 中的 OSGi 包之间共享配置文件?

Posted

技术标签:

【中文标题】在 Apache Servicemix 4 中的 OSGi 包之间共享配置文件?【英文标题】:Sharing a configuration file between OSGi bundles in Apache Servicemix 4? 【发布时间】:2011-05-21 15:08:30 【问题描述】:

是否有人能够在 SMX4 中的两个或多个捆绑包之间成功共享配置?我要找的是这个:

    $SMX_HOME/etc/myconfiguration.cfg 中有一个文件 让此配置“可用”以通过 OSGi 配置管理使用 Spring dm 注入到我的包中,即
org.postgresql.Driverjdbc:postgresql://localhost/db某个用户一些密码vm://default

然后,我可以将这样的东西注入到我的 bean 中:

. . . 豆> . . .

对于一个捆绑包来说,所有这些都只是桃子。我正在寻找一种方法来定义它一次,然后能够重用相同的配置文件作为一组包的属性。现在,我有多个包,每个包都有自己的配置实例(持久 id),因此,每个需要数据库连接、Java JMS 等的包都必须在每个文件中重复配置。

目前,我正在使用 Apache Servicemix 4,它使用 Apache Felix 作为 OSGi 容器。

【问题讨论】:

【参考方案1】:

我分享我的配置位于

$SMX_HOME/etc/my.config.cfg

使用这个声明

<!-- get properties as bean from OSGi Configuration Admin Service -->
<osgix:cm-properties id="myConfig" persistent-id="my.config" />

<!-- activate $... placeholder -->
<ctx:property-placeholder properties-ref="myConfig" />

在我的每个捆绑包中。看起来与您的解决方案非常相似,并且效果很好! 您可以共享您的配置(不需要为每个 bundle 提供配置文件),但您必须在每个 spring-application-context 文件中声明对此配置的引用。

我正在使用基于 apache-servicemix-4.3.0-fuse-01-00 的 FUSE 4.3。

【讨论】:

我必须试一试...我不确定是否可以跨包共享持久 ID。 感谢这篇文章;您是否碰巧知道是否有办法使这项工作适用于蓝图?或者如果这个当前的 spring 解决方案支持在运行时更改配置(更新两个包)? @AlanFoster (Un) 幸运的是,我不需要专注于 OSGi 开发 - 所以目前我无法回答您的问题,也没有时间弄清楚。对不起!

以上是关于在 Apache Servicemix 4 中的 OSGi 包之间共享配置文件?的主要内容,如果未能解决你的问题,请参考以下文章

Apache Karaf 与 Servicemix

无法安装Apache servicemix

无法在 Apache ServiceMix 中启动 OSGI 包

ServiceMix 中 Apache-Camel 路由的管理和监控

NoClassDefFoundError: OsgiDefaultCamelContext 使用 Apache ServiceMix

将 Apache ServiceMix 连接到 Websphere MQ