OSGi в Netbeans, ClassCastException при получении службы - PullRequest
0 голосов
/ 10 августа 2009

У меня проблема с ClassLoader. Так как я новичок, надеюсь, ответ не так уж и сложен:)

Я думаю, что это связано с библиотеками Compile vs. Runtime. в свойствах проекта Netbeans 6.7.1 библиотеки времени компиляции всегда распространяются на другие категории .. поэтому я не могу их различить.

При компиляции FelixHost используются следующие банки

  • Felix.jar
  • OSGi-core.jar
  • OSGi-compendium.jar
  • osgi.service.obr-1.0.2.jar

Но при запуске среда загрузит реализацию для OBR. Этот комплект OBR также содержит определения интерфейса. Я думаю, что именно поэтому есть classCastException ..

Я на самом деле хочу, чтобы FelixHost работал вместе с OBR, чтобы сделать некоторые начальные .. * инициализации 1021 *

Любые идеи приветствуются.

1 Ответ

1 голос
/ 10 августа 2009

Я предполагаю, что под "FelixHost" вы ссылаетесь на ваш проект, который инкапсулирует и запускает инфраструктуру Felix.

Проблема в том, что вы должны быть немного осторожны в отношении границы между "миром OSGi" и "миром не-OSGi". Все, что вы помещаете в classpath для FelixHost (т.е. также все зависимости времени компиляции в вашем случае), по сути, живет за пределами мира OSGi, поэтому не рекомендуется использовать такие пакеты, как "osgi.service.obr-1.0.2.jar" в этом случае.

Как вы указали, если платформа OSGi также загружает пакет "osgi.service.obr-1.0.2.jar", вы попадете в ClassCastException, потому что у вас есть по существу две версии одинаковых классов (интерфейсов).

Одним из возможных решений этой проблемы является разделение исходной логики инициализации на отдельный пакет и выполнение связанной с OBR работы из мира OSGi . Затем вы можете удалить зависимость компиляции FelixHost от «osgi.service.obr-1.0.2.jar» и загрузить только одну копию интерфейсов OBR.

...