Возможно ли в OSGi поддерживать проводку соединений даже через перезагрузки системы, даже если теперь есть новая, более высокая версия, мы остаемся со старой? Дело в том, что если что-то работает, мы не хотим рисковать, проводя старые пакеты в новую зависимость. Другими словами, мы стараемся изолировать обновления как можно больше, чтобы обновление в компоненте не влияло на ВСЕ другие компоненты (поскольку старые пакеты все еще используются для удовлетворения уже подключенных зависимостей)Не применять автоматические обновления пакетов для старых пакетов
As пример, предположим, что 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. Все они простые пучки
Нейл, забудьте о том, что они не идентичны. Скажем, что A и C зависят от B с диапазоном [1.0.0, 2.0.0). Однако, когда A был выпущен, существовал только B_1.0.0, поэтому A подключается к B_1.0.0. Затем C освобождается вместе с B_1.0.1. Я хочу, чтобы проводка A-> B_1.0.0 поддерживалась, а также C-> B_1.0.1. Я не хочу, чтобы система теперь подключала A-> B_1.0.1. Есть ли способ заблокировать это без запрета диапазонов? Я согласен с тем, что на основе семантического управления версиями не должно быть проблем с использованием 1.0.1, но мы должны признать, что существует риск> 0, изменив что-то, что работает на что-то новое – Hilikus
. О, и это делает меня еще более печальным, у меня есть работать с ним каждый день! – Hilikus
Если C добавлен позже, с диапазоном '[1.0.0, 2.0) ', тогда он должен выбрать версию 1.0.0, так как она уже подключена к A. Используется та же эвристика: OSGi хочет минимизировать количество экспорта одного и того же пакета. Он также не будет перезаписывать A до тех пор, пока это не будет сделано с помощью операции обновления пакета. Поэтому C будет использовать ту же проводку, что и A, которая равна 1.0.0. –