中断OSGi组件被激活的有效方法

时间:2017-06-16 21:14:07

标签: osgi karaf declarative-services

我有一个OSGi组件:

@Component(immediate=true)
public class SomeComponent implements SomeInterface {...}

请注意,该组件是即时的。此外,由于组件类正在实现一个接口,我理解一个服务将在组件激活时(作为其一部分)自动注册。

现在,如果满足某些条件,我希望能够动态中断组件激活和服务注册。抛出' ComponentException'在组件激活器中似乎没有做到这一点:

@Activate
public void activate() {
  if (notReady)
    throw new ComponentException("Component not ready");
}

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:3)

您无法抢占激活前发生的服务注册。使用两个组件会更好。一个没有服务的立即决定是否启用或禁用具有该服务的第二个组件的服务。默认情况下,可以禁用此第二个组件。