2013-02-12 4 views
2

У меня есть система модульной OSGi, в которой у меня есть следующие компоненты:Публикация не- @ службы Instantiate OSGi с iPOJO

  • конкретной реализации экземпляра протокола, которые представляют собой соединение через specfic протокол к конкретному серверу (экземпляр для каждой услуги подключения)
  • Некоторые конкретные службы диспетчера экземпляров протокола, создание и предварительная настройка экземпляров по требованию (несколько одиночных сервисов из, обычно, разных пакетов)
  • Менеджер соединений, который объединяет службы диспетчера протоколов и просит их предоставить экземпляры протокола при необходимости (Одна служба singletone)

Они упакованы в OSGi расслоения следующим образом:

`-ConnectionManager 
     `-ConnectionManager.class 
`-IrcProtocol 
     `-IrcProtocolManagerService.class 
     `-IrcProtocolInstance.class 
`-XMPPProtocol 
     `-XMPPProtocolManagerService.class 
     `-XMPPProtocolInstance.class 

ConnectionManager помечается

@Provides 
@Instantiate 
@Component 

и реализует Subscriber интерфейс, который enbles его с возможностью отправлять и прослушивать сообщения, доставленные обычно как-то напечатанные Event Admin.


Каждый *ProtocolManager помечается

@Provides 
@Instantiate 
@Component 

и реализует ProtocolManager интерфейс, который позволяет это открытие ConnectionManager службы слушателя.


Каждый *ProtocolInstance является annoteted с

@Provides 
@Component 

и реализует Subscriber интерфейс. Также он реализует интерфейс ProtocolInstance, который предлагает такие общие операции подключения, как connect() и disconnect().


Проблема здесь состоит в том, что ProtocolInstance s создается вручную, с new оператора, внутри ProtocolManager, не @Instantiate триггера аннотаций, и из-за этого - не участвует в издательской службе iPOJO, несмотря на это @Provides аннотаций ,


вопрос: как правильно (и предпочтительно декларативно, с аннотациями) опубликовать это программно созданные ProtocolListener услуги без ручного погружения в необработанную публикацию службы OSGi (по крайней мере, за пределами какого-то завод, может быть)? Или, возможно, как перестроить мою систему, чтобы она лучше играла с негласными рекомендациями iPOJO?

ответ

1

iPOJO не поддерживает создание объекта с помощью «нового». Действительно, экземпляр iPOJO - это не только эти объекты, но и контейнер, обертывающий его.

Однако, у вас есть два решения:

 Смежные вопросы

  • Нет связанных вопросов^_^