osgi bundle экспортирует класс, но все еще класс в classpath выбирается - PullRequest
0 голосов
/ 30 марта 2011

Я пытаюсь использовать развертывание уха с веб-приложением, которое использует пакет osgi и экспортирует некоторые классы. Это в appserver. класс экспорта комплекта A, производный от класса B. На самом деле ClassB - это сторонний класс с открытым исходным кодом, который решил предоставить комплект. Проблема в том, что мое ухо также имеет другую версию classB в директории lib уха.

При попытке развернуть приложение я получаю странную ошибку, класс A загружается из osgi bundle jar, но поскольку classB загружается из каталога lib уха, а не из пакета osgi, даже если он там есть.

Это приводит к ошибкам, возникающим из-за того, что classA ожидает некоторого поведения в своем базовом классе, но в действительности не существует, поскольку classB загружается из формы вне пакета.

Я не уверен, как это исправить - это мое первое знакомство с osgi, и я немного обеспокоен тем, что это может быть хуже, чем ад классного пути, особенно для приложений, которые требуют интеграции с частями, являющимися osgi, и частями нет.

1 Ответ

0 голосов
/ 30 марта 2011

Я знаю, что люди пытаются смешивать стеки Java EE и OSGi, но я думаю, что это рецепт проблем.Они оба имеют свои собственные ожидания в отношении того, как работают загрузчики классов, и заставить их сотрудничать может быть проблемой.

Если вы должны сделать это, вы можете упростить себе жизнь, вложив как можно больше своего веб-приложения вконтейнер OSGI.В качестве альтернативы, найдите место, где инициализируется среда выполнения osgi и измените способ подключения загрузчика классов его родителя. Вы даже можете написать пользовательский фильтрующий загрузчик классов, который не позволит OSGi загружать определенные классы из загрузчика классов webapp.Многие вещи возможны, но, возможно, вы действительно не хотите идти по этому пути ...

...