Spring のアプリケーション コンテキストを使用して Spring Bean をサービスとしてエクスポートしようとしています。それらを「プロトタイプ」スコープとしてエクスポートする必要がありますが、OSGi サービス レジストリがサービスをシングルトンとしてキャッシュしているため、これは不可能です。
いくつかの調査を行うと、この問題を回避するために「セッション」スコープを使用することを提案する投稿に出くわしました。これを機能させるためにこのチュートリアルに従っていますが、クラスローダーがインターフェイスを見つけられないことに関係する問題に悩まされています。
これが私が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 リポジトリにコピーされています。クラスローダーがスコープ「セッション」に必要なインターフェイスを見つけられない理由はありますか?