私はSpring OSGIとBlueprintに精通していますが、多くの初心者のように "classpath"の問題があります。バンドルを消費することによって、Spring OSGIサービス参照インタフェースを明示的にインポートする必要がありますか?
私は2つのOSGIバンドルを持っています.1つは、さまざまな豆を定義しています(Blueprintを使用して、重要ではない)。サービスとしてエクスポートします。 (Spring OSGIを使用して)サービスBeanを参照し、それらをいくつかのApache Camelルートにプラグインするもう1つのバンドルです。
サービスプロバイダーのバンドルの青写真は、次のようになります。
<service id="camelTsvDataFormat"
interface="org.apache.camel.spi.DataFormat">
<bean class="org.apache.camel.component.flatpack.FlatpackDataFormat"/>
</service>
サービス・コンシューマー・バンドルの春のコンテキストは次のようなものになります。
<osgi:reference id="tsvDataFormat"
interface="org.apache.camel.spi.DataFormat" />
<camel:camelContext>
<route>
<from uri="vm:in">
<setBody>
<constant>SELECT * FROM myTable</constant>
</setBody>
<to uri="jdbc:myDataSource" />
<marshal ref="tsvDataFormat" />
<to uri="file:/path/to/my/files/?fileName=out.tsv" />
</route>
</camel:camelContext>
を...しかし、展開時に、春は「見つかりませんクラス[org.apache.camel.spi.DataFormat] "。 Bnd命令のImport-Packageセクションにインターフェイスを追加することはできますが、手動で別の場所にクラスを2回リストする必要があります。
別の選択肢は、自分のプロジェクト内でインターフェイスを拡張してBndが自動的にそれを受け取るようにすることですが、これはおおむね問題になります。
私は、実際にインターフェイスクラスを解決することなく、インターフェイス名によるサービスのルックアップを期待していると思います。これはna ïですか?あるいは、Bndが私のappContextのサービス参照のインターフェースを自動的にインポートする方法がありますか? Bndがこれを行うことができる場合(例えば、プラグインを使用する場合)、Apache FelixバンドルプラグインでBndプラグインをMaven用に使用する標準的な方法はありますか?
これは私が見つけることができる最も近い議論は次のとおりです。 http://forum.springsource.org/archive/index.php/t-52913.html – RubyTuesdayDONO
別の思考 - このないように大した場合がありますサービスプロバイダのインターフェースはApache Camelのように "spi"パッケージにうまく収められていますか? – RubyTuesdayDONO
通常、bndはバイトコードで参照されているパッケージのインポートを追加します。 tsvDataFormatフィールドはどのクラスですか? –