Как использовать отдельные загрузчики класса и выполнение в той же JVM? (OSGI)

Я читал, что использование OSGI разделяет classloaders на модуль, который позволяет модулям использовать различные версии своих зависимостей.. одновременно выполняя все модули в той же JVM.

Как это работает? Если модуль, версия № 1 использования зависимости и модуля B использует версию № 2, разве Вы не столкнетесь с проблемой если модуль передачи экземпляр класса зависимости к модулю B как параметр метода?

Я думал бы, что модуль B дросселировал бы, если бы он ожидал другой интерфейс к классу зависимости.

5
задан Marcus Leon 16 March 2010 в 17:21
поделиться

1 ответ

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

Это позволяет вам раскрыть публичную зависимость, имея при этом внутренние/скрытые частные зависимости, и, как следствие, скрыть ваши зависимости от реализации, чтобы избежать этого. Хорошо то, что все это проверяется во время разрешения Bundle, а не непонятные ошибки во время выполнения.

Конкретно в вашем примере, если A и B используют несовместимый интерфейс, и A зависит от B, то A не сможет разрешиться с ошибкой зависимости. Поэтому он даже не сможет начать передавать ему несовместимый тип.

5
ответ дан 14 December 2019 в 19:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: