2013-10-25 112 views
1

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

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

+0

你正在使用哪种框架?我正在使用Equinox,并且我对组件做了相同的处理,每个服务都有一个消息,但我从来没有遇到任何问题。 – Cristiano

+0

你好,我使用Knopflefish。你是如何定义绑定顺序的? –

回答

1

编辑:同意下面的人使用slf4j。

编辑:我从来没有回答过这个问题:我可以配置绑定顺序吗?很可能不会单独使用Declaritive Services。

这听起来很适合ServiceTracker。只要保持关闭,直到您的日志服务绑定。幸运的是,这与Declarative Services非常兼容。

还有pax日志记录,您不绑定到LogService,而是使用log4j/slf4j API,因此您可能不必担心LogService的生命周期。

编辑:还有第三个选项,您为绑定上的每个服务发布一个OSGI事件,然后有一个事件侦听器将打印LogService上的事件,或排队直到LogService可用。尽管如此,这是更令人感动的部分。

+1

我会说为SLF4j api的,我不会建议添加所有类型的复杂性只为记录器 –

0

您的DS运行时可能会有一些可选的日志记录或跟踪选项,这可能有助于了解发生了什么。