0

Eclipse 用の標準のbndtoolsプラグインをインストールし、apache felix osgi ランタイムを実行しています。宣言型サービス (DS) コンポーネントについて学習しようとしています。どうやら、アノテーション (bndtools のチュートリアルで例が示されています) が存在する前は、コンポーネントは xml データを使用して記述されていました。それが私がやろうとしていることです。

以下は単純なクラスです (DS コンポーネントとして公開されます): "HelloComponent.java"

package org.osgi.book.ds.minimal;

public class HelloComponent {
    public HelloComponent(){
        System.out.println("HelloComponent created.");
    }
}

コンポーネント宣言を行う xml ファイルは次のとおりです: 「minimal.xml」

<?xml version="1.0" encoding="UTF-8"?>
<!-- minimal.xml -->

<scr:component xmlns:scr="http://www.osgi.org/xlmns/scr/v1.1.0" immediate="true">
    <implementation class="org.osgi.book.ds.minimal.HelloComponent"/>
</scr:component>

そして、最終的に OSGi ランタイムに発行される jar ファイルを生成するために bndtools によって使用されることになっている .bnd ファイルは次のとおりです: "minimal_ds.bnd"

Private-Package: org.osgi.book.ds.minimal

Include-Resource: minimal.xml
Service-Component: minimal.xml

ホスト ランタイム OSGi コンテナーで次のバンドルを実行していることに注意してください。

   ID|State      |Level|Name
    0|Active     |    0|System Bundle (4.4.1)
    2|Active     |    1|Apache Felix Gogo Command (0.14.0)
    3|Active     |    1|Apache Felix Gogo Runtime (0.12.1)
    4|Active     |    1|Apache Felix Gogo Shell (0.10.0)
    5|Active     |    1|BookReaderOSGiInPractice.minimal_ds (0.0.0.201509091856)
   15|Active     |    1|Apache Felix Configuration Admin Service (1.8.0)
   16|Active     |    1|Apache Felix Declarative Services (1.8.2)
   17|Active     |    1|osgi.enterprise (4.2.0.201003190513)
   18|Active     |    1|osgi.residential (4.3.0.201111022239)

すべてがアクティブに実行されているにもかかわらず、DS コンポーネントが初期化されていない理由がわかりません (コンソール出力「HelloComponent created.」が表示されるはずです)。どんな助けでも大歓迎です。

最後に、プロジェクトのディレクトリ構造は次のとおりです。

BookReaderInPractice
|
|- src
|   |- org.osgi.book.ds.minimal
|           |_ HelloComponent.java
|
|- minimal_ds.bnd
|
|- minimal.xml
4

1 に答える 1

1

更新 (編集) :

Neil Bartlett の提案に従って更新: 答えはさらに単純であることがわかりました: 私のコメントに書かれているように、DS xml ファイルの xml 名前空間にタイプミスがありました: "xml" ではなく "xlm" です。

元の答え:

ここには2つの問題があると思います:

  1. ファイルminimal.xmlは、生成されたバンドルjar(「生成された」フォルダーにあります)にコピーされません
  2. フレームワークはminimal.xmlについて認識していません

これを修正するには、minimal_ds.bnd に次の行を追加します。

Include-Resource: minimal.xml
Service-Component: minimal.xml

さらに、HelloComponent のコンストラクターを使用する代わりに、コンポーネントをアクティブ化するときに呼び出される次のようなメソッドを作成します。

public void activate() {...}
于 2015-09-10T13:22:49.240 に答える