2016-11-09 6 views
0

OSGiフレームワークとしてFelixを使用し、OSGiコンポーネントを管理するためにFelix Dependency Managerを使用します。コンポーネントの開始メソッドでXMLをロードして検証する状況があります。スキーマに対するXMLの検証が失敗した場合は、バンドルを停止します。私たちは、起動時にFelix Dependency Managerを使用して作成されたOSGiバンドルの停止

  • は、startメソッドで例外をスローしようとしましたが、バンドルがまだ
  • アクティブになるには、startメソッドでバンドルのstopメソッドを呼び出していますが、これは不安定な(停止)にバンドルを設定し、状態。

      FrameworkUtil.getBundle(this.getClass()).stop(); 
    

startメソッドは、バンドルが停止したままにしておく必要があり、致命的な問題を持っている場合は、この要件すなわちを達成するための正しい方法は何ですか?

答えて

0

誰かが起動しようとした後でバンドルをアクティブにしたくない場合は、BundleActivatorのstartメソッドから例外をスローする必要があります。これはフレームワークに間違ったことがあり、バンドルを開始できないことを伝える最良の方法です。

コンポーネントのstartメソッドから例外をスローします。その時点でバンドルはすでにアクティブになっているので、あなたは遅すぎます。

  1. ロードして、XMLを検証(およびそれが失敗した場合に例外をスロー):

    私はあなたがDependencyActivatorBaseとからstartメソッドをオーバーライドし、この場合にお勧めします。

  2. スーパークラスのstartメソッドを呼び出して、DMがその作業を実行できるようにします。

これは、このバンドルにアノテーションベースのバージョンのDMを使用できないことを暗黙的に意味します。そのため、使用している場合、コードを使用してそのコンポーネントと依存関係を宣言するバンドルに変換する必要があります。

+0

これはうまくいきました。ありがとう、マルセル – Hari

関連する問題