将 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 容器中。
我想在我的 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 容器中。