質問が出されてからしばらく時間が経っていることはわかっていますが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) のようです。