2013-08-22 3 views
0

Я недавно начал использовать рамки OSGi .. Я пытаюсь запустить OSGi контейнер из проекта на основе Maven ..Какой пакет для FrameworkFactory я должен выбрать в OSGi?

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

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

Ниже мой главный APPLICATION-

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, я получаю два варианта на выбор .. Ниже изображение. Может ли кто-нибудь помочь мне, какой из них мне нужно выбрать здесь?

enter image description here

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

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

Это право?

ответ

3

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

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

+0

Другой ключ заключается в том, что 'org.osgi.framework.launch.FrameworkFactory' является интерфейсом, тогда как' org.apache.felix.framework.FrameworkFactory' является конкретным классом. При использовании ServiceLoader вы всегда хотите загрузить интерфейс. –

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