首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将osgi服务bean公开为类而不是接口

无法将osgi服务bean公开为类而不是接口
EN

Stack Overflow用户
提问于 2018-09-26 12:21:29
回答 1查看 425关注 0票数 2

我希望将spring从一个包上下文导出到另一个包上下文。当这个bean没有像MongoClient这样的接口时,问题就开始了。第一个包上下文注册了Mongoclient,但是当我想将它公开给另一个包时,我得到:“在引用包中的mongo类型:com.mongodb.Mongo的注册表中找不到bean”。是否有任何方法可以通过类而不是接口在OSGi注册表中定义bean?

异常来自引用包:

线程“SpringOsgiExtenderThread86”中的异常 org.apache.camel.RuntimeCamelException: org.apache.camel.FailedToCreateRouteException:未能创建路由文章-作者-getAll:>>>筛选器[{in(标头{operationName} == ]) getAllAuthors)} -> [SetHeaderCamelMongoDbLimit,{2}, Tomongodb:mongo?database=xxxx&collection=xxxx&operation=findAll,登录db后选择getAllAuthors ${body}][路由中的<<<: Route(article-author-getAll)[[From[activemq:queue:backend.au... 由于未能解析终结点: 由于:无法在注册表中找到类型为: mongo的mongodb://mongo?collection=xxx&database=xxxx&operation=findAll: com.mongodb.Mongo

在服务包里,一切看起来都很好!

服务包中的代码如下所示:

代码语言:javascript
复制
 <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>

引用包上下文中的代码:

代码语言:javascript
复制
<reference id="mongoDataSourceReference" bean-name="mongoDatasource" 
context-class-loader="service-provider" 
interface="com.mongodb.MongoClient"/>

MongoClient没有接口,osgi:reference必须具有定义的接口属性。

我尝试扩展MongoClient类并实现接口,然后将它公开到osgi注册中心--我在参考包中正确地收到了它,但是我得到了来自camelMongo的异常,必须只定义MongoClient类!

骆驼蒙古路线是这样的:

代码语言:javascript
复制
from("direct:findAll")
.to("mongodb:MYMONGOCLIENTBEAN?database=flights&collection=tickets&operation=findAll")

骆驼芒果路线期望连接字符串中的MongoClient bean。

那么,有任何方法可以通过类而不是接口来定义osgi注册表中的bean吗?或者我应该在与MongoClient相同的包中定义camelMongo bean?

EN

回答 1

Stack Overflow用户

发布于 2018-09-28 20:17:22

获得对现有OSGi服务bean的引用之前,首先需要将该bean导出为OSGi服务:

代码语言:javascript
复制
<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接口,但规范还支持在类名下注册服务对象,因此短语服务接口可以解释为引用接口或类。

因此,从理论上讲,没有什么可以阻止您使用完整的类名获得对您的黄豆的引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52517658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档