Как выставить шаблон весенней кушетки в качестве службы OSGI

Был еще один вопрос относительно Spring-data-couchbase и OSGI.

Я хочу иметь разные пакеты сохраняемости в зависимости от функциональности, но я хотел бы иметь общий пакет, который обеспечивает мне подключение к кушетке. Если я хочу сканировать репозитории из другого пакета, я должен передать ему объект template-ref.

<couchbase:repositories base-package="xyz.abc.model"
 couchbase-template-ref="cb-template-first">
</couchbase:repositories>

Шаблон создается так, как показано ниже в соответствии с примерами

<couchbase:template id="cb-template-first"
     client-ref="cb-first" />

По сути, я хотел знать, есть ли способ представить шаблон как службу OSGI, чтобы на эту службу можно было ссылаться в моем другом пакете.


person Srikanth Hugar    schedule 11.04.2014    source источник
comment
Пожалуйста, предоставьте больше информации о вашей среде, используете ли вы blueprint или felix scr? Или только OSGi?   -  person Martin Baumgartner    schedule 11.04.2014
comment
Мы используем только OSGI. У нас есть OSGI-контейнер Apache Karaf, поверх OSGI мы установили пакеты Spring, CXF, Couchbase и т. д. Couchbase-spring-data, который недавно был выпущен, имеет концепцию, называемую шаблоном, и хотел узнать, как предоставить шаблон в качестве службы OSGI, как описано выше.   -  person Srikanth Hugar    schedule 14.04.2014
comment
Вам помог мой ответ?   -  person Martin Baumgartner    schedule 15.04.2014


Ответы (1)


Если вы используете только «OSGi», как указано в вашем комментарии, у вас есть класс активатора пакета, который инициализирует ваш контекст. В этом случае ваш активатор будет выглядеть так:

public class Activator implements BundleActivator
{
   @Override
   public void start( BundleContext context ) throws Exception
   {
     // start spring application context 
     // template-interface = application context get bean 
      context.registerService( template-interface.class.getName(), template-interface, null );

   }
}

Но если вы хотите создать приложение OSGi на основе Spring, я бы порекомендовал использовать план Gemini для удаления стандартного кода. Gemini Blueprint — это расширение, которое сканирует все запущенные пакеты на наличие контекстных файлов внутри META-INF/spring и запускает их автоматически. Из-за поддержки пространства имен плана Gemini вы можете опубликовать или получить услугу в своем контексте:

 <osgi:service id="simpleServiceOsgi" ref="simpleService" interface="org.xyz.MyService" />
 <osgi:reference id="messageService" interface="com.xyz.MessageService"/>
person Martin Baumgartner    schedule 14.04.2014