服务消耗和白板模式

时间:2018-10-04 16:55:46

标签: osgi

在OSGI中普遍使用了白板模式。我对此有疑问,希望您能帮忙解决。

我有一个实现服务插件的组件P。该服务正在修改系统组件R(它使用类型为Plugin的所有服务作为动态引用)及其行为。

现在,我有一个服务R,它依赖于R并依赖于这种修改的行为。 我需要确保P实际已被R选中,然后才能在X中使用它。到目前为止,这取决于所有消耗R的组件中的P。

现在我不确定是否足够,因为假设P联机后,依赖于它的所有组件的绑定方法在实际激活任何组件之前都会被调用。

我还没有发现任何可以保证这一点的OSGI规范。 如果不是,有什么办法知道吗?

1 个答案:

答案 0 :(得分:1)

是的,是的,这不是一个安全的情况。尽管OSGi零件做得很完美,但R在P上所做的工作却创造了竞争条件。

所以最好的解决方案是...白板。如果可能的话,将X注册为R所选择的白板服务。然后R负责拾取P,对其进行适当对待,然后致电X。这不是简单的代码,因为您可以获得add(P)/remove(P)add(X)/remove(X)同时进行。那将是一个很好的其他问题:-)

如果您不能更改R,那么我就没有很好的解决方案,因为您有隐藏的依赖关系。 R为P创造了新情况,但没有为您提供适当的反应点。