绑定OSGi声明性服务的顺序

时间:2013-07-10 16:09:46

标签: java osgi declarative-services

假设我使用OSGi声明式服务,并且我有一个带有policy = dynamic的数字引用的服务......

A - 强制一元。

B - 强制一元。

C - 强制倍数。

D - 可选的一元。

E - 可选倍数。

我的服务启动时可以使用所有引用。 有没有办法控制调用哪个命令绑定?

我想首先使用B绑定并对每个进入的E做一些事情,但我无法确保B在E之前被绑定。

是的,更合乎逻辑的方法是让代表B的服务也绑定到E并做它应该做的任何事情,但我不能修改B,我只能使用它。如果我创建一个刚刚绑定到B和E的新服务,我仍会遇到同样的问题。

当所有内容都被绑定时,我可以在activate方法中做任何我需要做的事情,然后将其作为附加(动态)E绑定,但我想知道是否还有其他方法...

1 个答案:

答案 0 :(得分:4)

使引用B使用“静态”策略,确保在调用activate方法之前将其绑定。

如果使用“动态”策略将参考E声明为多个/可选 - 当您具有多个引用时,这几乎是唯一合理的选择 - 那么只要服务发布/未发布,它就会被绑定/解除绑定。这可能发生在任何线程中,甚至可能在调用activate方法期间发生(多次!)。