Я хочу загрузить мои файлы jar OSGI из базы данных или другого источника - PullRequest
2 голосов
/ 30 ноября 2009

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

Ответы [ 4 ]

3 голосов
/ 28 января 2010

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

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

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

2 голосов
/ 05 декабря 2009

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

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

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

1 голос
/ 01 декабря 2009

Посмотрите на проект PAX URL: http://wiki.ops4j.org/display/paxurl/Documentation

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

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

0 голосов
/ 30 ноября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...