Это важная персона.
У меня хорошо структурированная, но монолитная кодовая база с примитивной модульной архитектурой (все модули реализуют интерфейсы, но имеют один и тот же путь к классам). Я осознаю глупость этого подхода и проблемы, которые он представляет при развертывании на серверах приложений, которые могут иметь разные конфликтующие версии моей библиотеки.
Сейчас я нахожусь в зависимости от 30 банок, и я на полпути, хотя сгибаю их. Теперь некоторые из моих модулей легко объявить версионными зависимостями, такими как мои сетевые компоненты. Они статически ссылаются на классы в JRE и других библиотеках BNDded, но мои компоненты, связанные с JDBC, создаются через Class.forName (...) и могут использовать один из любого количества драйверов.
Я разбиваю все на пакеты OSGi по областям обслуживания.
- Мои основные классы / интерфейсы.
- Отчетность связанных компонентов.
- Компоненты, связанные с доступом к базе данных (через JDBC).
- и т.д ....
Я хочу, чтобы мой код можно было использовать без OSGi через один файл jar со всеми моими зависимостями и вообще без OSGi (через JARJAR), а также чтобы он был модульным через метаданные OSGi и гранулированные пакеты с зависимостями информация.
Как настроить пакет и
мой код, чтобы он мог
динамически использовать любой драйвер на
путь к классам и / или в OSGi
контейнерная среда
(Felix / Equinox / и т.д.)
Существует ли метод времени выполнения, чтобы определить, работаю ли я в контейнере OSGi, совместимом между контейнерами (Felix / Equinox / и т.д.)?
Нужно ли использовать другой механизм загрузки классов, если я нахожусь в контейнере OSGi?
Требуется ли импортировать классы OSGi в мой проект, чтобы иметь возможность загружать неизвестный драйвер JDBC во время пакета через мой модуль базы данных?
У меня также есть второй способ получения драйвера (через JNDI, который действительно применим только при работе на сервере приложений). Нужно ли менять код доступа JNDI для серверов приложений, поддерживающих OSGi?