Възможно ли е в OSGi да се запазят връзките на пакета дори при рестартиране на системата, където дори ако сега има налична нова, по-висока версия, оставаме със старата? Въпросът е, че ако нещо работи, не искаме да го рискуваме, като свързваме старите пакети към новата зависимост. С други думи, ние се опитваме да изолираме актуализациите, доколкото е възможно, така че актуализацията в даден компонент да не засяга ВСИЧКИ други компоненти (тъй като старите пакети все още ще се използват за задоволяване на вече свързани зависимости)
Като пример, да кажем, че A зависи от B с диапазон [1.0.0, 2.0.0). Разполагаме версия 1.0.0 на B, така че сега A е свързан към B_1.0.0
Сега създаваме пакет C, който зависи от логическа промяна, така че зависи от B с диапазон [1.0.1, 2.0.0). Така че внедряваме B_1.0.1. Сега, ако рестартираме системата, C и A ще бъдат свързани към 1.0.1, тъй като е в обхвата на зависимост и на двете и на теория е "по-добро" съвпадение за A от 1.0.0. Има ли някакъв начин да кажете на OSGi да не прави това и да запази кабелите възможно най-дълго (да речем, докато старият пакет не бъде действително премахнат, в който случай би било добре да отидете с най-високата версия в гамата)
Това, което правим в момента, е да забраняваме диапазони, така че зависимостите са като [1.0.0, 1.0.0]. Това ни дава изолацията на актуализацията, която искаме, но на цената, че основно губим модулността; за да актуализираме зависимост, трябва да актуализираме зависимите, дори ако кодът в зависимите не се е променил. Мисля, че е огромен анти-модел за забрана на обхвати, така че се опитвам да предложа по-добра алтернатива с обхвати, но това ще даде изолацията на актуализацията, от която се нуждаем, и първата ми идея е да забраня повторното окабеляване дори в сесии
Ако има значение, ние не използваме OSGi услуги. Всички те са обикновени пакети