簡體   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