Я хочу загрузить мои файлы jar OSGI из базы данных или другого источника

StackOverflow https://stackoverflow.com/questions/1817214

  •  08-07-2019
  •  | 
  •  

Вопрос

Мне нужно предоставить собственный ClassLoader? Размышляя вслух, это не кажется правильным подходом, потому что внутри загрузчика классов никто не знает требуемой версии.

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

Решение

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

См. "Спецификация службы обработчиков URL", Базовая спецификация R4 OSGi.

Glassfish использует этот подход для установки пакеты веб-приложений , кстати.

Другие советы

Простое решение - создать свой собственный пакет начальной загрузки, который будет предоставлять все другие пакеты из базы данных (или другого места). OSGi позволяет вам устанавливать пакеты из произвольного InputStream , поэтому должно быть достаточно просто подключить его к любому источнику, который вы хотите (например, JDBC).

См. BundleContext.installBundle () для получения дополнительной информации.

Вы не должны искать " обратный вызов " через который фреймворк уведомит вас «когда ему нужно загрузить требуемую зависимость» так как автоматическое управление зависимостями (ala Maven) не является частью основной функциональности OSGi (хотя это может быть достигнуто с помощью таких служб, как OBR ).

Просмотрите проект URL PAX: http://wiki.ops4j.org/ дисплей / paxurl / документация

Это демонстрирует отделение проблем загрузки пакета OSGi от способа его хранения. Теоретически я не вижу каких-либо серьезных препятствий для использования базы данных в качестве хранилища пакетов, хотя я также не вижу никаких очевидных преимуществ.

К вашей версии версий пакетов вам нужен механизм для определения, какие пакеты (и версии) загружать. Вы будете хранить пакеты в базе данных с информацией о версии, иначе как вы будете хранить разные версии одного и того же пакета?

Вы всегда можете загрузить их из базы данных (или чего-либо еще) в какое-то локальное местоположение, а затем динамически установить их в OSGi Framework. Все, что вам нужно дать каркасу - это путь к файловой системе пакета. Конечно, вам придется написать весь код для этого самостоятельно. С другой стороны, если вы используете Eclipse P2, у вас может быть больше гибкости благодаря автоматической настройке.

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