Возможно ли в 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. Все они простые пакеты