Системные пакеты, не экспортируемые OSGi System Bundle

Я новичок в OSGi. Я использую Apache Felix на Android. Я установил системные пакеты для экспорта системным пакетом, как показано ниже:

/** Packages exported by the system bundle. */
String SYSTEM_PACKAGES = 
    "org.osgi.framework;version=\"1.6.0\"," + 
    "org.osgi.framework.launch;version=\"1.0.0\"," +
    "org.osgi.framework.wiring;version=\"1.0.0\"," +
    "org.osgi.framework.startlevel;version=\"1.0.0\"," +
    "org.osgi.framework.hooks.bundle;version=\"1.0.0\"," +
    "org.osgi.framework.hooks.resolver;version=\"1.0.0\"," +
    "org.osgi.framework.hooks.service;version=\"1.1.0\"," +
    "org.osgi.framework.hooks.weaving;version=\"1.0.0\"," +
    "org.osgi.service.packageadmin;version=\"1.2.0\"," +
    "org.osgi.service.startlevel;version=\"1.1.0\"," +
    "org.osgi.service.url;version=\"1.0.0\"," +
    "org.osgi.util.tracker;version=\"1.5.0\"";

Map map = new HashMap();
map.put ( "org.osgi.framework.system.packages" , SYSTEM_PACKAGES );
// I set more properties ...
felix = new Felix ( map );
felix.start();

Однако, когда я пытаюсь установить пакет ConfigAdmin, он выдает исключение BundleException:

org.osgi.framework.BundleException: Unresolved constraint in bundle 
org.apache.felix.configadmin [1]: Unable to resolve 1.0: missing requirement [1.0] 
osgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.4.0)
(!(version>=2.0.0)))

Почему отсутствует это требование, когда я экспортировал пакет org.osgi.framework из системного пакета версии 1.6.0? Я проверил правильность установки системного свойства, выполнив:

// DEBUG
Toast.makeText ( getApplicationContext() , 
                 felix.getBundleContext().getProperty ( "org.osgi.framework.system.packages" ) , 
                 Toast.LENGTH_LONG ).show();

Возможно, это простая ошибка с моей стороны. Кто-нибудь может мне помочь?

Спасибо!


person Kartik Sankaran    schedule 21.08.2012    source источник


Ответы (2)


Зачем ты это делаешь? Felix должен автоматически экспортировать эти пакеты из комплекта систем.

И если вам нужно экспортировать дополнительные пакеты из системного пакета помимо обычно экспортируемых, используйте org.osgi.framework.system.packages.extra свойство конфигурации запуска.

person BJ Hargrave    schedule 21.08.2012
comment
Сначала я так и делал (позволив Феликсу установить для меня системные пакеты). Но поскольку он выдавал исключение из отсутствующего требования, я подумал, что должен установить его явно. В любом случае, получается, что ошибка была вызвана чем-то другим - я указал причину ниже. - person Kartik Sankaran; 22.08.2012

Проблема была решена. Я делал ошибку при установке параметра дополнительных пакетов:

map.put ( "org.osgi.framework.system.packages.extra" , "" );

Felix не принимает пустую строку (сначала я использовал пустую строку, думая, что позже добавлю к ней имена пакетов). Когда я удалил это утверждение, все заработало нормально.

Как сказал Б. Дж. Харгрейв, не нужно устанавливать системные пакеты.

Кроме того, мы не должны передавать пустые строки в качестве значений карты, я этого не осознавал.

person Kartik Sankaran    schedule 22.08.2012