Это большой вопрос, на который было бы нецелесообразно полностью отвечать здесь. Ниже приведен упрощенный обзор.
OSGi выделяет Java ClassLoader
для каждого разрешенного пакета. Когда пакет обновляется, OSGi сначала отправляет сигнал остановки в пакет, позволяя ему освободить ресурсы и подготовиться к сборке мусора.
Новый пакет затем повторно разрешается в соответствии с его требованиями, которые могут измениться по сравнению с предыдущей версией. Предполагая, что новая версия все еще разрешается (т.е. ее требования все еще удовлетворяются), тогда OSGi выделяет новый ClassLoader
, использует его для загрузки классов в пакете, и если пакет имеет активатор и находился в состоянии ACTIVE
до обновления , отправляет сигнал запуска на вновь загруженный активатор.