используйте аннотацию @Activate в OSGI в Karaf - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь использовать функцию в своем новом пакете, которая запускается один раз при запуске контейнера Apache Karaf.

Основной класс в Пакете выглядит следующим образом:

@Component(service = BrandNewBundle.class)
public class BrandNewBundle {

    ....
    @Activate
    protected void activate(ComponentContext myComponentContext) {
        LOG.info("Brand new bundle started.");
    }
}

В консоли karaf состояние пакета отображается как Active. Но в журналах я не вижу сообщения, которое я пытался зарегистрировать.

Некоторая информация:

  • Это сборка Maven
  • osgi.cmpnи slf4j-api мои зависимости в pom.xml, и пока ничего больше.
  • В этом файле

нет файла bnd.bnd Я прочитал Apache Felix Service Component Runtime (SCR) стр. В отличие от того, что там упоминалось, мой OSGI-INF/....xml сгенерирован автоматически. Я не знаю, как отлаживать дальше.

Подводя итог, вопрос в том, как на самом деле вызвать мою функцию activate?

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Аннотация Component также должна иметь immediate=true. Я добавил это, и функция activate() была запущена при запуске karaf.

@Component(
    immediate=tue,
    service = BrandNewBundle.class
)
0 голосов
/ 29 октября 2019

Это может быть классическая проблема в карафе. Вам необходимо установить функцию scr.

feature:install scr
...