首页 > 解决方案 > 将 Sling 调度程序与 Eclipse Equinox 或 OSGI @Reference 规则一起使用

问题描述

我想在我的 Eclipse Equinox 环境中使用 Sling 调度程序作为捆绑包,现在尝试只运行示例,无论是白板还是通过 API 都没有成功。经过大量调试后,我现在能够使其工作,但我必须在 QuartzScheduler 中更改调度程序包并更改对 MetricRegistry 的引用以添加可选基数:

@Reference(cardinality=ReferenceCardinality.OPTIONAL)
MetricRegistry metricsRegistry;

否则会使服务无法在 Equinox 上启动。

在捆绑包中运行测试似乎即使使用 Felix 也永远无法解决,但在这种情况下,服务仍然启动。我还应该注意到 MetricRegistry 似乎不是一项服务,我不明白为什么它会通过@Reference 实例化。实际上将行更改为:

MetricRegistry metricsRegistry = new MetricRegistry();

在所有情况下,Felix 或 Equinox 都将正确检索 metricsRegistry。

我是否发现了错误或有什么我不明白的地方?

标签: osgisling

解决方案


在 Apache Sling中,从捆绑包MetricRegistry中注册了一个实例,请参阅MetricsServiceImpl#activate。你应该在你的 OSGi 容器中部署这个包。org.apache.sling.commons.metrics


推荐阅读