将 Sling Scheduler 与 Eclipse Equinox 或 OSGI @Reference 规则结合使用

Using Sling Scheduler with Eclipse Equinox or OSGI @Reference rules

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

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

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

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

MetricRegistry metricsRegistry = new MetricRegistry();

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

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

在 Apache Sling 中,MetricRegistry 实例是从 org.apache.sling.commons.metrics 包中注册的,请参阅 MetricsServiceImpl#activate。您应该将此捆绑包部署到您的 OSGi 容器中。