2

Neil Bartlettの記事http://njbartlett.name/2010/07/19/factory-components-in-ds.htmlは、マネージドサービスまたはマネージドファクトリを使用せずにバンドルの構成を設定する方法を示しています。

このメソッドの構成を実際に設定する例を検索するには、felixファイルのインストールまたはマネージドサービスを使用した例を指します。

サービスを構成するためのOSGi宣言型サービスとマネージドサービスの質問に答えて?Neil Bartlettは、「DSが実際にコンポーネントのManagedServiceまたはManagedServiceFactoryを作成することはないことに注意してください。これは、ConfigurationListenerを使用してConfig Adminをリッスンすることで機能します。ただし、内部の詳細は重要ではありません...component.nameと一致するPID/factoryPIDを使用して構成を作成するだけです。そしてそれは「うまくいく」

この手法には、構成ディクショナリにpidエントリを配置することが含まれると思いますが、これが構成管理でどのように使用されるかはわかりません。

この方法を使用して構成を設定する方法のガイドまたは簡単な例が非常に役立ちます。

4

1 に答える 1

1

質問が出されてからしばらく時間が経っていることはわかっていますがManagedServiceFactory、Declarative Services を使用して のようなコンポーネントを作成しようとしたときに、同じ問題に遭遇しました。だから私は私の解決策を共有したいと思います。多分他の人はそれが便利だと思うでしょう。私の問題は次のようなものでした:

コンポーネントを定義しました (注釈付き@Component)。felix file-install を使用して追加する構成ごとに、指定された構成で作成されたそのコンポーネントのインスタンスがすぐにアクティブ化されるようにします。

最初に とのプロパティfactoryをいじってみましたが、すべてが不要であり、間違った結果を返すことさえあります (maven プラグインの felix 注釈プロセッサは、configurationPid を処理するときにバグがあるようです)。configurationPid@Component

私が思いついた解決策:

package com.example.my;

@Component(
    name = MyExampleComponent.FACTORY_PID,
    configurationPolicy = ConfigurationPolicy.REQUIRE,
    property = {"abc=", "exampleProp="}
)
public class MyExampleComponent {

    public static final String FACTORY_PID = "com.example.my.component";

    @Activate
    protected void activate(BundleContext context, Map<String,Object> map) {
        // ...  
    }
}

次に、次の名前の felix file-install の構成ファイルを作成しましたcom.example.my.component-test1.cfg

abc = Hello World
exampleProp = 123

com/example/my/component展開すると、ファイルを含むように、構成フォルダーにフォルダー構造が自動的に作成されます。

factory.config

コンテンツ:

factory.pid="com.example.my.component"
factory.pidList=[ \
  "com.example.my.component.525ca4fb-2d43-46f3-b912-8765f639c46f", \
  ]

.

525ca4fb-2d43-46f3-b912-8765f639c46f.config

コンテンツ:

abc="Hello World"
exampleProp="123"
felix.fileinstall.filename="file:/..._.cfg"
service.factoryPid="com.example.my.component"
service.pid="com.example.my.component.525ca4fb-2d43-46f3-b912-8765f639c46f"

これ525ca4fb-2d43-46f3-b912-8765f639c46fは、ランダムに生成された ID (おそらく UUID) のようです。

于 2016-09-21T09:19:30.723 に答える