繁体   English   中英

通过外部捆绑软件按名称停用/禁用OSGI组件

[英]deactivate/disable OSGI component by name from external bundle

有没有一种方法可以通过其名称停用给定的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();
    }
}

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM