IPojo - @Reference не внедряет сервис - PullRequest
4 голосов
/ 21 декабря 2011

В одном пакете есть интерфейс IService, реализованный классом ServiceImpl:

public interface IService
{
    void doSomething();
}

@Component
@Provides
@Instantiate
public class ServiceImpl implements IService
{
    public void doSomething()
    {
    }
}

Во втором пакете у меня есть другой класс, ServiceConsumer (команда оболочки GoGo; специальные аннотации не включены), с использованием предоставляемого сервисав первом пакете:

@Component
@Provides
@Instantiate
public class ServiceConsumer
{
    @Requires
    private IService service;

    public doIt()
    {
        service.doSomething();
    }

}

Когда я импортирую и запускаю два пакета в Феликсе, я вижу, что все мои службы правильно создаются с использованием экземпляров ipojo: и что ServiceImpl предоставляет IService.Тем не менее, когда doIt () выполняется, service имеет значение null.

Поскольку IService, кажется, доступен, я ожидаю, что @Requires вставит хороший экземпляр, но, похоже, он этого не сделает.

У меня такое ощущение, что есть что-то очень очевидное, чего я не делаю, но я понятия не имею, что.

Ответы [ 2 ]

1 голос
/ 27 января 2012

Вы также создали metadata.xml?пожалуйста, посмотрите пример здесь http://felix.apache.org/site/ipojo-in-10-minutes.html

afaik, вы также можете получить его с помощью плагина maven, смотрите здесь http://felix.apache.org/site/ipojo-hello-word-maven-based-tutorial.html

0 голосов
/ 24 февраля 2012

Как называется метод doIt()?

Вам не нужен XML-файл, так как вы используете аннотации.

Если у вас установлена ​​команда 'arch', вы можете проверить, что все экземпляры объявлены и действительны:

ipojo:instances
ipojo:instance instance_name

С уважением.

...