簡體   English   中英

無法將osgi服務bean作為類未接口公開

[英]unable to expose osgi service bean as class not interface

我想將spring bean從一個bundle上下文導出到另一個bundle。 當此bean沒有MongoClient之類的接口時,問題就開始了。 第一個綁定上下文注冊Mongoclient,但是當我想將其公開給另一個綁定上下文時,我得到:“引用綁定中的類型為com.mongodb.Mongo的mongo在注冊表中找不到任何bean”。 有什么方法可以通過類而不是接口在OSGi注冊表中定義bean?

異常來自參考包:

線程“ SpringOsgiExtenderThread-86”中的異常
org.apache.camel.RuntimeCamelException:
org.apache.camel.FailedToCreateRouteException:無法在以下位置創建路由article-author-getAll:>>> Filter [{in([header {operationName} ==
getAllAuthors])}-> [SetHeader [CamelMongoDbLimit,{2}],
要[mongodb:mongo?database = xxxx&collection = xxxx&operation = findAll],請在路徑中登錄[在db select getAllAuthors $ {body}]]] <<之后:
路線(文章的作者 - GETALL)[從[ActiveMQ的:隊列:backend.au ...
由於無法解析端點:
mongodb:// mongo?collection = xxx&database = xxxx&operation = findAll由於:在注冊表中找不到以下類型的mongo的bean:
com.mongodb.Mongo

在服務包中,一切看起來都不錯!

服務包中的代碼如下所示:

 <bean id="mongoDatasource" class="com.mongodb.MongoClient">
    <constructor-arg name="uri" ref="mongoClientUri" />       
</bean>

<bean id="mongoClientUri" class="com.mongodb.MongoClientURI">
<constructor-arg name="uri" value="${mongo_host}" />
</bean>

來自引用包上下文的代碼:

<reference id="mongoDataSourceReference" bean-name="mongoDatasource" 
context-class-loader="service-provider" 
interface="com.mongodb.MongoClient"/>

MongoClient沒有接口,並且osgi:reference必須具有定義的接口屬性。

我嘗試擴展MongoClient類並實現Interface,然后將其公開給osgi注冊表,我在參考包中正確接收了它,但是隨后我從camelMongo中獲得了例外,在其中我必須僅定義MongoClient類!

駱駝蒙哥路線看起來像這樣:

from("direct:findAll")
.to("mongodb:MYMONGOCLIENTBEAN?database=flights&collection=tickets&operation=findAll")

駱駝mongo路由期望連接字符串中有MongoClient bean。

那么,有什么方法可以通過類而不是接口在osgi注冊表中定義Bean嗎? 或者我應該在與camelMongo相同的包中定義MongoClient bean?

獲得對現有OSGi服務Bean的引用之前,您首先需要將此Bean作為OSGi服務導出

<osgi:service ref="beanToPublish" interface="com.xyz.MyService"/>

盡管建議使用,但是您的服務類不需要實現接口。 參見規格: https ://docs.spring.io/spring-osgi/docs/current/reference/html/service-registry.html#service-registry: export

OSGi服務平台核心規范定義了術語服務接口來表示服務的公共方法的規范。 通常,這將是Java接口,但是規范也支持在類名下注冊服務對象 ,因此短語服務接口可以解釋為引用接口或類。

因此,從理論上講,沒有什么可以阻止您使用完整的類名來引用您的Mongo bean。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM