Я реализовал 2 услуги A, B в своем комплекте. Я хотел бы изменить код службы A, создав новый файл jar и выполнив команду обновления, но сохранить службу B, не запуская ее снова.
Как поддерживать работу службы/компонента при обновлении пакета OSGI
Ответы (1)
Похоже, у вас 2 услуги в 1 пакете. Единицей развертывания является пакет, поэтому я рекомендую разделить два сервиса на два пакета. В противном случае отмена развертывания вашего существующего пакета, естественно, также приведет к отключению службы B.
В качестве альтернативы, если API/интерфейс находится в отдельном пакете, вы можете развернуть новую реализацию службы для A в отдельном пакете с более высоким приоритетом и перемонтировать все виды использования службы. Что, как правило, довольно запутанно, так что это отдаленная рекомендация второго места.
Изменить: вы комментируете, что объединяете службы в пакет, чтобы минимизировать количество банок, но хотите обновлять службы независимо. В частности, для минимизации количества банок: вы пытаетесь решить проблему, которая у вас действительно была? В основном я работаю с Liferay, который полностью OSGi, а обычная ванильная установка поставляется с более чем 1000 пакетов — среда выполнения отлично справляется с этим. Убедитесь, что вы не оптимизируете упреждающе то, что не нуждается в оптимизации.
Если у ваших компонентов разные интервалы обслуживания, разверните их в разных пакетах. Период. Бесполезно работать против системы, у которой вообще нет проблем с количеством пакетов.