OSGi フレームワークを開始し、バンドルをインストール/開始するカスタム Main クラスを含むカスタム jar があります。このメイン jar には、プロパティ ファイルも含まれています。
目標: メイン jar のこのプロパティ ファイルのプロパティを取得する必要があるバンドル A があります。
私の最初の試みは、(Apache Felix SCR/Declarative Services を使用して) バンドル A でコンポーネントを定義し、その activate-method でプロパティを取得することでした。これはこれまでのところ機能しており、@Property-annotation で指定されたデフォルト値を取得しています。
しかし、プロパティ ファイルのプロパティをこのコンポーネントに渡すにはどうすればよいでしょうか?
OSGi アプリケーションへの引数の受け渡し では、Config Admin を使用するように言及されていますが、これを Main クラスで使用するにはどうすればよいでしょうか?
- Config Admin はメイン jar ではなくバンドルにあり、バンドルは特定の順序でインストールされません。
- Main クラスは、特定の service.pid はおろか、インストールするバンドルについても何も知りません。
アップデート:
@vizier によって提案されたアプローチを試しています (Config Admin を使用しないため、上記の問題はありません)。
- メイン jar (システム バンドル) でサービス インターフェイスを定義する
- プロパティファイルを読み取る実装を提供します(プロパティファイルは同じjarにあります)
- このサービス インターフェイスを含むパッケージ X をエクスポートします
- 次に、バンドル A はパッケージ X をインポートできます。たとえば、Declarative Services を使用してサービスを参照できます。
しかし、私のバンドル A では次のようになります。
org.osgi.framework.BundleException: Unresolved constraint in bundle <bundle A> [14]: Unable to resolve 14.0: missing requirement [14.0] osgi.wiring.package; (&(osgi.wiring.package=<package X>)(version>=0.1.0)(!(version>=1.0.0)))
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1868)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295)
at java.lang.Thread.run(Thread.java:722)
カスタム パッケージがマニフェスト ファイルの Export-Package に追加されている場合でも、システム バンドルは osgi パッケージのみをエクスポートしますか? または何がうまくいかないのですか?