【问题标题】:Exporting Spring Bean Service in OSGI- New Instance per Injection Call在 OSGI 中导出 Spring Bean 服务 - 每个注入调用的新实例
【发布时间】:2014-02-16 07:44:48
【问题描述】:

我正在尝试使用 Spring 的应用程序上下文将 Spring bean 作为服务导出,我需要将它们导出为“原型”范围,但由于 OSGi 服务注册表将服务缓存为单例,因此这是不可能的。

在做一些研究时,我发现了一个post 建议使用“会话”范围来解决这个问题。我正在关注this tutorial 以使其正常工作,但我遇到了一个与类加载器找不到接口有关的问题。

这是我声明 bean 的方式

<osgi:service id="SimulationExporter" ref="simulationService" interface="org.geppetto.core.simulation.ISimulation"/>
<bean id="simulationService" scope="session" class="org.geppetto.simulation.SimulationService">
<aop:scoped-proxy proxy-target-class="false"/>
</bean>

将 bean 导出到另一个包时,我收到以下错误

Caused by: java.lang.IllegalArgumentException: interface org.springframework.aop.scope.ScopedObject is not visible from class loader
at java.lang.reflect.Proxy.getProxyClass0(Proxy.java:484)
at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:713)
at org.springframework.aop.framework.JdkDynamicAopProxy.getProxy(JdkDynamicAopProxy.java:117)

导入服务 bean 的包具有依赖关系 org.springframework.aop-3.0.0.RELEASE ,这也被复制到了 virgo 存储库。任何想法为什么类加载器找不到范围“会话”所需的接口?

【问题讨论】:

    标签: osgi eclipse-virgo


    【解决方案1】:

    您的 MANIFEST.MF 是否包含 aop.scope 的导入包? 如果您使用 Apache Felix 生成它,请尝试添加如下内容:

        <Import-Package>org.aopalliance.aop,org.springframework.aop,org.springframework.aop.scope,org.springframework.aop.framework,*</Import-Package>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      • 2013-03-20
      • 2013-07-31
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多