在blueprint中使用spring osgi服务

在blueprint中使用spring osgi服务,osgi,apache-camel,fuseesb,blueprint,spring-dm,Osgi,Apache Camel,Fuseesb,Blueprint,Spring Dm,我有一个spring上下文,它导出在/META-INF/spring/spring dao.xml下定义的osgi服务,如下所示 <osgi:service ref="stockDao" interface="com.test.StockDao" />` 在进行此配置之后,我得到以下错误 java.lang.Exception: Can not resolve feature: Unsatisfied requirement(s): -----------------------

我有一个spring上下文,它导出在
/META-INF/spring/spring dao.xml
下定义的osgi服务,如下所示

<osgi:service ref="stockDao" interface="com.test.StockDao" />` 
在进行此配置之后,我得到以下错误

java.lang.Exception: Can not resolve feature:
Unsatisfied requirement(s):
---------------------------
service:(service=com.test.StockDao)
Boohoo Database Test

at org.fusesource.fabric.agent.ObrResolver.resolve(ObrResolver.java:215)[67:org.fusesource.fabric.fabric-agent:7.2.0.redhat-024]
at org.fusesource.fabric.agent.DeploymentAgent.updateDeployment(DeploymentAgent.java:566)[67:org.fusesource.fabric.fabric-agent:7.2.0.redhat-024]
at org.fusesource.fabric.agent.DeploymentAgent.doUpdate(DeploymentAgent.java:432)[67:org.fusesource.fabric.fabric-agent:7.2.0.redhat-024]
at org.fusesource.fabric.agent.DeploymentAgent$1.run(DeploymentAgent.java:242)[67:org.fusesource.fabric.fabric-agent:7.2.0.redhat-024]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)[:1.6.0_43]
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)[:1.6.0_43]
at java.util.concurrent.FutureTask.run(FutureTask.java:138)[:1.6.0_43]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)[:1.6.0_43]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)[:1.6.0_43]
at java.lang.Thread.run(Thread.java:662)[:1.6.0_43]
目前,Springbeans中导出的osgi服务只能被Springbeans引用。另一方面,blueprint导出的服务只能被另一个blueprint引用


如果我弄错了,请纠正我?如果这是可能的,我该怎么做。

这是错误的,在OSGi的服务注册表中注册的任何服务都可以通过标准OSGi服务机制、blueprint、DS、iPOJO等来使用。。。。 您只需要在BlueprintXML中引用相应的接口。
顺便说一句,语法与Spring OSGi xml几乎相同

我找到了解决办法

捆绑“A”-您的spring camel上下文 -应将清单条目作为 Export-Service: com.test.StockDao Import-Service: com.test.StockDao 导出服务:com.test.StockDao

捆绑“B”-您的蓝图骆驼上下文 -应将清单条目作为 Export-Service: com.test.StockDao Import-Service: com.test.StockDao 导入服务:com.test.StockDao

即使spring在ServiceRegistry中注册osgi服务,blueprint也会查看导出服务的清单条目。因此,在清单文件中创建条目可以解决这个问题

这可以在各自的bundle中使用maven bundle插件来完成

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>2.3.7</version>
    <extensions>true</extensions>
    <configuration>
        <instructions>
            <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
            <Private-Package>${osgi.private.pkg}</Private-Package>
            <Export-Package>${osgi.export.pkg}</Export-Package>
            <DynamicImport-Package>*</DynamicImport-Package>
            <Import-Package>${osgi.import.package}</Import-Package>
            <Export-Service>${osgi.export.service}</Export-Service>
        </instructions>
    </configuration>
</plugin>

org.apache.felix
maven捆绑插件
2.3.7
真的
${project.artifactId}
${osgi.private.pkg}
${osgi.export.pkg}
*
${osgi.import.package}
${osgi.export.service}

是的,这是可能的。如果您尝试这样做,那么请提供失败方式的详细信息。感谢添加失败详细信息。这看起来像是FuseSource解析器出了问题。它似乎从一个bundle(可能通过静态分析Blueprint XML…很难说)中获取了
com.test.StockDao
服务的需求,但它没有在bundle中找到应该提供它的相应功能。你可能应该把这个带到FuseSource论坛上寻求具体帮助。谢谢@NeilBartlett。