Как использовать отдельные загрузчики классов и работать в той же JVM? (OSGI) - PullRequest
5 голосов
/ 16 марта 2010

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

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

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

1 Ответ

5 голосов
/ 16 марта 2010

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

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

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

...