2016-12-01 8 views
0

Есть ли способ деактивировать данный компонент OSGI по его названию?деактивировать/отключить компонент OSGI по имени из внешнего пакета

Метод componentContext.disableComponent(componentName) - но он работает только с компонентами одного и того же пучка.

Какое решение лучше всего подходит для этого, не добавляя новую услугу к данному пакету для деактивации компонента?

Решение:

При использовании, например, Felix это будет:

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(); 
    } 
} 

ответ

3

Вы можете использовать услугу ServiceComponentRuntime. Это позволяет анализировать и управлять любым компонентом.

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); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^