从外部包中按名称停用/禁用OSGI组件

时间:2016-12-01 12:10:08

标签: java osgi apache-felix

有没有办法按名称停用给定的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();
    }
}

1 个答案:

答案 0 :(得分:3)

您可以使用ServiceComponentRuntime服务。它允许内省和管理任何组件。