2014-01-25 4 views
0

Я только начал играть с сервисами OSGi и имею следующую ситуацию. У меня есть проект, который содержит 2 службы. Сервис A требует обслуживания B, поэтому я попытался ввести зависимую услугу, используяинъекция зависимости osgi между сервисами

@Inject 
private ServiceB svc; 

но структура не вводит. Если установка I следующие два метода в отслуживать и установить эти методы, как «связать/undbind» в моем OSGi componentA.xml рамки называет эти методы, и я могу использовать Service B в пакете A.

public synchronized void bind(IServiceB service) 
{ 
    this.svc = service; 
} 

public synchronized void unbind(IServiceB service) 
{ 
    if (this.svc == service) 
    { 
    this.svc = null; 
    } 
} 

Вопрос в том, почему он не работает с @Inject? Извините, если это глупый вопрос, я совершенно новый для всей этой темы. Спасибо заранее!

ответ

0

Похоже, вы используете Declarative Services, который не поддерживает вставку полей или аннотации JSR-330. Полевая инъекция имеет ограниченную полезность в OSGi, где услуги могут быть введены или «un-injected» в любое время. Впрыск метода более полезен, поскольку он дает вам возможность что-то делать, когда это происходит.

Однако я настоятельно рекомендую использовать аннотации для декларативных услуг. Это избавит вас от необходимости писать компонент .xml вручную.

+0

Привет, Нейл, спасибо за ответ. Я не упомянул об этом, но вы, конечно, правы, я использую DS. Не могли бы вы немного объяснить, что вы подразумеваете под «аннотациями для DS»? То, что я сделал до сих пор, генерирует компонент .xml и настраивает требуемую информацию с помощью редактора eclipse (так же, как редактор манифеста, всего несколько кликов для настройки интерфейса службы класса реализации). Спасибо заранее! – paddy3k

+0

Итак, снова некоторые догадки предполагают, что вы используете Eclipse PDE (среда разработки плагинов)? Ой ой ой. Это вызовет у вас много боли в дороге. В PDE вы по существу не можете генерировать * ничего * и должны делать все это вручную. Взгляните на учебник bndtools (http://bndtools.org/tutorial.html), который должен дать представление об аннотациях конкретно, и в целом, как правильный инструмент может сделать вашу жизнь намного проще. –

+0

Я использую Eclipse JEE Edition правильно. Спасибо за подсказку bndtools, я буду исследовать это дальше! Сначала я думал, что эти аннотации выходят «из коробки» OSGi. Я думаю, вопрос поставлен достаточно ясно и еще раз спасибо за это! – paddy3k

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