bundleA
というアクティブなバンドルがあり、別のバンドルからdoSomething()
というメソッドでExample
というクラスを実装しています。 ExampleImpl
はExample
を実装し、ServiceLoader
によってロードされます(SPI Flyのおかげで)。 ExampleImpl.doSomething()
のbundleA
では、doSomething()
を呼び出すバンドルのBundleWiring
を取得する必要があります(Bundle
またはBundleContext
はAPIを変更できないため)。私はbundleA
さんBundleWiring
はなく、呼び出し元のバンドルのBundleWiring
を取得することができます:OSGiでコーリングバンドルのバンドル配線を取得するにはどうすればよいですか?
Bundle bundleA = FrameworkUtil.getBundle(ExampleClass.class);
BundleWiring bundleWiringOfBundleA = bundle.adapt(BundleWiring.class);
私が呼び出しバンドルのBundleWiring
を入手するにはどうすればよいですか?
私の特定のケースでは、発信バンドルは常にLiferay Portal 7.0で実行されているWABになります。ですから、Liferayポータルに固有の解決策があればそれを受け入れますが、より一般的なOSGiソリューションでも問題ありません。
呼び出しバンドルのバンドル配線は、現在のバンドル配線に依存するすべてのバンドルのバンドル配線ではありません。私は現在のバンドルの配線に依存しているバンドル配線を得ることができることを知っているが、それは私が、具体的呼び出しバンドルを得る助けにはなりません。
Bundle bundleA = FrameworkUtil.getBundle(ExampleClass.class);
List<BundleWires> bundleWires =
bundleWiring.getProvidedWires(BundleRevision.PACKAGE_NAMESPACE);
bundleWires.get(0).getRequirerWiring();
なぜBundleWiringが必要ですか? –
@ChristianSchneider、私はWAB(または呼び出しバンドル)の 'BundleWiring'を取得したいので、WABが依存するすべてのバンドルを見つけることができます。私はすべての依存関係を見つけたいので、依存関係にある特定のファイルと注釈付きクラスを見つけることができます。私は技術的にOSGiバンドルであるいくつかのjarファイルで作業していますが、実際にはOSGi環境用にセットアップされていません。だから私は、OSGiフレンドリーになるようにすべてを書き直すことなく動作させることができるかどうかを見極めようとしています。 – stiemannkj1