Какой пакет для FrameworkFactory я должен выбрать в OSGi?

Недавно я начал использовать платформу OSGi. Я пытаюсь запустить контейнер OSGi из проекта на основе maven.

Я добавил эту зависимость в свой файл pom.xml в вышеуказанном проекте maven:

<dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.framework</artifactId>
    <version>4.2.1</version>
</dependency>

Ниже мое основное приложение-

public static void main(String[] args) throws BundleException {

    FrameworkFactory frameworkFactory = ServiceLoader.load( FrameworkFactory.class).iterator().next();
    Map<String, String> config = new HashMap<String, String>();

    //TODO: add some config properties
    Framework framework = frameworkFactory.newFramework(config);
    framework.start();
}

Теперь, когда я пытаюсь импортировать пакеты для FrameworkFactory, я получаю два варианта на выбор. Ниже приведено изображение. Может ли кто-нибудь помочь мне, какой из них мне нужно выбрать здесь?

введите здесь описание изображения

Я выбирал эти два?

import org.osgi.framework.launch.Framework;
import org.osgi.framework.launch.FrameworkFactory;

Это правильно?


person AKIWEB    schedule 22.08.2013    source источник


Ответы (1)


Это org.osgi.framework.launch.FrameworkFactory, так как это дает вам доступ ко всем платформам OSGi, а не только к Apache Felix. ServiceLoader использует имя этого класса для поиска во всех ваших записях путей к классам (jars) каталоге META-INF/services для файла org.osgi.framework.launch.FrameworkFactory. Если вы посмотрите на пакет фреймворка Felix, вы обнаружите, что этот файл содержит «org.apache.felix.framework.FrameworkFactory», который затем будет создан и возвращен.

Поэтому, если вы хотите использовать только Apache Felix, вы также можете просто выполнить new org.apache.felix.framework.FrameworkFactory() вместо использования косвенного загрузчика служб Java.

person Peter Kriens    schedule 22.08.2013
comment
Другая подсказка заключается в том, что org.osgi.framework.launch.FrameworkFactory — это интерфейс, тогда как org.apache.felix.framework.FrameworkFactory — это конкретный класс. При использовании ServiceLoader всегда нужно загружать интерфейс. - person Neil Bartlett; 22.08.2013