【问题标题】:Using spring osgi service in blueprint在蓝图中使用spring osgi服务
【发布时间】:2013-06-05 04:57:27
【问题描述】:

我有一个 spring 上下文,它像这样导出/META-INF/spring/spring-dao.xml 下定义的 osgi 服务

<osgi:service ref="stockDao" interface="com.test.StockDao" />` 

问题是:我想在我的蓝图中使用上面定义的服务,它是在位置/OSGI-INF/blueprint/blueprint.xml 下定义的。

<reference id="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]

目前,spring bean中导出的osgi服务只能被spring bean引用。另一方面,蓝图导出的服务只能被另一个蓝图引用。

如果我弄错了,请纠正我?如果可以的话,我该怎么做。

【问题讨论】:

  • 是的,这是可能的。如果您尝试这样做,请详细说明失败的方式。
  • 感谢您添加失败详情。这看起来像是 FuseSource 解析器出了点问题。似乎它从一个捆绑包中获取了对com.test.StockDao 服务的需求(可能是通过静态分析蓝图 XML ......很难说),但它没有在捆绑包中找到应该提供它的相应功能。您可能应该将其带到 FuseSource 论坛以获得特定帮助。
  • 谢谢@NeilBartlett。

标签: osgi apache-camel fuseesb blueprint spring-dm


【解决方案1】:

这是错误的,在 OSGi 的服务注册表中注册的任何服务都可以通过 std. OSGi服务机制、蓝图、DS、iPOJO等.... 您只需要在您的蓝图 XML 中引用相应的接口。 顺便提一句。语法几乎与 Spring-OSGi xml 相同。

【讨论】:

    【解决方案2】:

    我找到了解决方案。

    Bundle 'A' - 你的春骆驼上下文 - 应该有清单条目

    导出服务:com.test.StockDao

    Bundle 'B' - 你的蓝图骆驼上下文 - 应该有清单条目

    导入服务:com.test.StockDao

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

    这可以在各个包中使用 maven 包插件来完成

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

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 2010-12-31
      • 2018-05-27
      • 2012-08-12
      • 2013-07-31
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2012-11-22
      相关资源
      最近更新 更多