Здравствуйте!
Я хочу сделать одну программу, и изначально разбить её на несколько модулей так, чтобы можно было
а) включать/отключать некоторые модули во время выполнения (run-time) для того, чтобы сэкономить ресурсы,
б) заменять модуль версии X на модуль версии Y во время выполнения, не трогая (не компилируя,
не останавливая) другие модули, если они не связаны с заменяемым модулем,
в) добавлять функционал во время выполнения, добавляя новые модули (опять-таки, не трогая уже установленные).
Контейнер, который будет обеспечивать эти 3 функции, должен соответствовать следующим критериям:
1) Легковесность — контейнер не должен требовать слишком много ресурсов (пустой контейнер без
дополнительных функций должен весить не более 10 МБ).
2) Универсальность — важно, чтобы можно было устанавливать любые модули, от окошка на базе Swing,
модуля для связи с базой данных до веб-сервера.
3) Желательно, но не обязательно: В конфигурации модуля можно прописать, что он (модуль) будет работать
только, если установлен другой модуль. Если при инсталляции во время выполнения требуемый модуль отстутствует в
контейнере, то контейнер сообщает об этом пользователю и не запускает инсталлируемый модуль.
4) Обязательно: Контейнер должен быть с открытым исходником, разрешающим применение в коммерческих приложениях.
Я нашёл 2 принципиальные возможности сделать такой контейнер:
1) Каркас на базе OSGi, например,
Apache Felix,
Equinox или
Knopflerfish
2) Микро-ядро JBoss — взять JBoss и выдрать из него всё, кроме механизмов работы с модулями.
Вопрос: Какие ещё варианты есть и какие из них кажутся Вам оптимальными?
Заранее благодарен
Дмитрий Писаренко