OSGi в Netbeans, ClassCastException при получении службы
-
12-09-2019 - |
Вопрос
у меня проблема с 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.