2016-12-01 76 views
0

有没有办法通过名称禁用给定的OSGI组件?通过外部软件包的名称禁用/禁用OSGI组件

componentContext.disableComponent(componentName)方法 - 但它只适用于相同捆绑的组件。

什么是最佳做法的解决方案做到这一点,而无需向给定的包添加新的服务来停用组件?

解决方案:

当使用例如菲利克斯这将是:

import org.apache.felix.scr.ScrService; 

@Reference 
private ScrService serviceComponentRuntime; 

    public void stopByName(final String componentName) 
{ 
    final org.apache.felix.scr.Component[] components = serviceComponentRuntime.getComponents(componentName); 

    for (final org.apache.felix.scr.Component component : components) 
    { 
     component.disable(); 
    } 
} 

回答

0

您可以启用/禁用通过组件上下文:

@Component(service=ComponentEnabler.class) 
public class ComponentEnabler { 

    ComponentContext context; 

    @Activate 
    void activate(ComponentContext context) { 
    this.context = context; 
    } 

    public void enable(String name) { 
    this.context.enableComponent(name); 
    } 
    public void disable(String name) { 
    this.context.disableComponent(name); 
    } 
}