Вопрос

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

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

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

  • Феликс.jar
  • osgi-core.jar
  • osgi-compendium.jar
  • osgi.service.obr-1.0.2.jar

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

Я действительно хочу, чтобы Felixhost работал вместе с OBR, чтобы сделать некоторое начальное обеспечение ..

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

Это было полезно?

Решение

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

Проблема в том, что вам нужно быть немного осторожным с границей между «миром OSGi» и «миром, не относящимся к OSGi».Все, что вы помещаете в путь к классам 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top