繁体   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