[英]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.