как работает загрузчик классов при дублировании класса между бандлом и его фрагментом

У меня есть некоторое непонимание фрагмента OSGI,

Предположим, я развернул пакет «B» с двумя классами «com.company.C1» и «com.company.C2», где C1 использует C2. А затем я развернул фрагмент «F» для узла «B», где F содержит только один класс «com.company.C2» (с небольшим изменением кода первого класса)

Теперь, если выполняется класс "com.company.C1", какой класс (файл) "com.company.C2" будет использоваться, из "B" или из "F"?

Может ли наличие одного и того же класса C2 дважды в одном и том же загрузчике классов вызывать ошибки времени выполнения (одна и та же версия и разные версии)?


person Jugu    schedule 27.09.2016    source источник


Ответы (1)


Прочтите главу "3.9.4 Общий порядок поиска" спецификации ядра OSGi, и все станет ясно.

Вкратце: сначала проверяются классы в пакете, а затем пакет фрагментов. Если у вас есть класс в пакете и в пакете фрагментов, класс в пакете фрагментов никогда не будет использоваться.

person Balazs Zsoldos    schedule 27.09.2016
comment
См. также раздел 3.9.1 Путь к классу пакета, в котором показан пример того, как можно освободить место в пакете хоста для фрагмента, который заменит классы в пакете хоста. - person BJ Hargrave; 27.09.2016