我熟悉Spring OSGI和Blueprint,但是遇到了「classpath」困難(像許多新手一樣)。必須通過使用bundle來顯式導入Spring OSGI服務引用接口?
我有兩個OSGI包 - 一個定義各種bean(使用藍圖,不是它應該重要),並將它們導出爲服務;和另一個引用服務bean的bundle(使用Spring OSGI)並將它們插入一些Apache Camel路由。
服務提供商捆綁的藍圖看起來是這樣的:
<service id="camelTsvDataFormat"
interface="org.apache.camel.spi.DataFormat">
<bean class="org.apache.camel.component.flatpack.FlatpackDataFormat"/>
</service>
服務消費者包的Spring上下文看起來是這樣的:
<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部分,但似乎是多餘的,必須在不同位置手動列出兩次類。
另一種選擇是在我自己的項目中擴展接口,因此Bnd會自動將其接入,但這大致同樣麻煩。
我想我期望Spring通過接口名稱來查找服務,而不必實際解析接口類。這是不是na ï ve?或者有沒有辦法讓Bnd在我的appContext的服務引用中自動導入接口?如果Bnd可以執行此操作(例如使用插件),那麼是否有一種標準方式將Maven的Apache Felix捆綁插件使用Bnd插件?
這是最接近的討論中,我可以找到: http://forum.springsource.org/archive/index.php/t-52913.html – RubyTuesdayDONO
另一個想法 - 這是不是這樣一個大問題,如果與Apache Camel一樣,服務提供者接口能夠很好地集成到「spi」包中? – RubyTuesdayDONO
通常bnd會爲字節碼中引用的任何包添加導入。什麼類的tsvDataFormat字段? –