Экспорт службы Spring Bean в OSGI — новый экземпляр на вызов инъекции

Я пытаюсь экспортировать компонент Spring в качестве службы, используя контекст приложения Spring, мне нужно, чтобы они экспортировались как область «прототипа», но это невозможно из-за того, что реестр службы 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)

Пакет, импортирующий сервисный компонент, имеет зависимость org.springframework.aop-3.0.0.RELEASE , которая также копируется в репозиторий virgo. Любые идеи, почему загрузчик классов не нашел тот интерфейс, который ему нужен для области «сеанс»?


person jrmartin    schedule 25.01.2014    source источник


Ответы (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>
person Tarelli    schedule 31.01.2014