osgi - 将 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。
我是否发现了错误或有什么我不明白的地方?
解决方案
在 Apache Sling中,从捆绑包MetricRegistry
中注册了一个实例,请参阅MetricsServiceImpl#activate。你应该在你的 OSGi 容器中部署这个包。org.apache.sling.commons.metrics
推荐阅读
- vba - 在数据透视表中每 20 个项目中选择一个项目
- plugins - Rust:在动态加载的库内部(和外部)强制生命周期
- oauth - 成功注册keycloak后如何获取Id_token?
- c - 嵌入式软件:在任务内调用函数时发生异常
- ios - Plugin.FirebaseAuth.FirebaseAuthException:访问钥匙串 Xamarin.forms 应用时出错
- python - 检测何时在服务器上授权 Discord bot
- angular - 单水疗路由器:Angular 9
- c++ - 带有 std::async 的递归函数从某种大小的 std::vector 中卡住
- arduino - 在 Arduino IDE 的程序中编写程序
- google-cloud-platform - BigQuery 和 'bq load' - 使用 GMEK 覆盖某些表的默认数据集 CSEK