2016-12-01 13 views
0

名前で指定されたOSGIコンポーネントを非アクティブ化する方法はありますか?外部バンドルから名前でOSGIコンポーネントを無効/無効にする

componentContext.disableComponent(componentName)メソッドがありますが、同じバンドルのコンポーネントでのみ動作します。

コンポーネントを無効にするために、指定されたバンドルに新しいサービスを追加しない限り、これを行うベストプラクティスソリューションは何ですか?

ソリューション:例えば

を使用してFelixこれは:

答えて

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); 
    } 
} 
関連する問題