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

中断OSGi组件被激活的有效方法,osgi,karaf,declarative-services,Osgi,Karaf,Declarative Services,我有一个OSGi组件: @Component(immediate=true) public class SomeComponent implements SomeInterface {...} 请注意,该组件是即时的。另外,由于component类正在实现一个接口,我知道服务将在激活组件时自动注册(作为组件激活的一部分) 现在,如果满足某些条件,我希望能够动态中断组件激活和服务注册。在组件激活器中抛出“ComponentException”似乎无法完成以下任务: @Activate publi

我有一个OSGi组件:

@Component(immediate=true)
public class SomeComponent implements SomeInterface {...}
请注意,该组件是即时的。另外,由于component类正在实现一个接口,我知道服务将在激活组件时自动注册(作为组件激活的一部分)

现在,如果满足某些条件,我希望能够动态中断组件激活和服务注册。在组件激活器中抛出“ComponentException”似乎无法完成以下任务:

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

有什么建议吗?谢谢

您不能抢占激活前发生的服务注册。你最好有两个组件。一个没有服务的即时组件,用于决定是否启用或禁用具有该服务的第二个组件。默认情况下,可以禁用第二个组件