在OSGI中导出Spring Bean服务 - 每个注入调用的新实例

时间:2014-01-25 06:29:57

标签: osgi eclipse-virgo

我正在尝试使用Spring的应用程序上下文将spring bean导出为服务,我需要将它们导出为“原型”作用域,但由于OSGi Service注册表将服务缓存为单例,因此无法实现。

做了一些研究我发现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导出到另一个bundle时,出现以下错误

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的bundle具有依赖性org.springframework.aop-3.0.0.RELEASE,并且这也被复制到virgo存储库。任何想法为什么类加载器找不到范围“session”所需的接口?

1 个答案:

答案 0 :(得分: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>