План OSGi: Как вызвать метод onBundleChanged () из интерфейса BundleListener? - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь реализовать интерфейс BundleListener в классе для получения изменений пакета. Я пытаюсь заставить его работать, но мой метод onBundleChanged () не вызывается. Возможно, это потому, что он не реализован в классе «Активатор». Понятия не имею.

Я хотел бы получить последние изменения пакетов, потому что я хочу разработать приложение, в котором пакеты могут быть установлены как плагины во время выполнения. Я подумал, что используя интерфейс BundleListener, я мог бы разрешить Bundles, которые можно установить в моей среде Apache Karaf.

Выдержка из Blueprint.xml

<bean id="MyBundleListener" class="com.hallo.service.MyBundleListener"/>

Мой класс

public class MyBundleListener implements BundleListener {

@Override
public void bundleChanged(BundleEvent event) {
    System.out.println("bundleChanged() -> Just to test if it works");
}
}

В Apache Karaf я использую

log:tail

Чтобы узнать, вызван ли метод, но результата пока нет.

1 Ответ

0 голосов
/ 03 мая 2018

Создание bean-компонента недостаточно для BundleListener. Вы также должны добавить BundleListener в BundleContext.

Вы можете сделать это методом init компонента. См

bundleContext.addBundleListener

Также не забудьте снова удалить слушателя в методе уничтожения.

https://osgi.org/javadoc/r4v43/core/org/osgi/framework/BundleContext.html

...