【问题标题】:Order of service binding with declarative services与声明式服务绑定的服务顺序
【发布时间】:2013-10-25 12:15:20
【问题描述】:

有没有办法找出或确定服务与声明式服务绑定的顺序?我的问题是我在我的 OSGI 中运行了一个日志服务以及其他服务。现在,我的组件绑定了这个日志服务和其他一些服务。每次绑定或取消绑定服务时,我都想写一条日志消息。但是,如果服务 A 在我的日志服务之前绑定,则无法写入 A 的日志条目。

我可以以某种方式配置绑定顺序吗?我阅读了有关将服务的绑定策略设置为“静态”的信息,这应该确保首先绑定该服务。但这并不是我想要的。我不希望每次我的日志服务由于某种原因消失时都重新创建我的组件。

【问题讨论】:

  • 您使用的是哪个框架?我正在使用 Equinox,我对组件的操作与您相同,我对每个绑定的服务都有一条消息,但我从来没有遇到过问题。
  • 您好,我使用 Knopflefish。你是如何定义你的绑定顺序的?

标签: osgi declarative-services


【解决方案1】:

我同意下面关于使用 slf4j 的人。

我可以以某种方式配置绑定顺序吗?

很可能不单独使用声明式服务。

这听起来很适合 ServiceTracker。只需将其关闭,直到您的日志记录服务绑定。幸运的是,这与声明式服务非常兼容。

还有 pax-logging,您无需绑定到 LogService,而是使用 log4j/slf4j API,因此您可能不必担心 LogService 的生命周期。

还有第三个选项,您可以在绑定时为每个服务发布一个 OSGI 事件,然后有一个事件侦听器,它将在 LogService 上打印事件,或者将它们排队直到 LogService 可用。不过,这比您想的要多。

【讨论】:

  • 我会说选择 SLF4j api,我不建议只为记录器添加各种复杂性
【解决方案2】:

您的 DS 运行时可能有一些可选的日志记录或跟踪选项,这可能有助于了解幕后情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2010-09-23
    • 2012-04-27
    • 2012-11-07
    • 1970-01-01
    • 2019-08-05
    • 2011-05-01
    相关资源
    最近更新 更多