Как сохранить service / compo nnet работающим во время обновления OSGI - PullRequest
2 голосов
/ 14 апреля 2020

Я реализовал 2 услуги A, B в своем комплекте. Я хотел бы изменить код службы A, создав новый файл jar и выполнив команду update, но оставив службу B в рабочем состоянии без ее повторного запуска.

1 Ответ

4 голосов
/ 14 апреля 2020

Похоже, у вас есть 2 услуги в одном комплекте. Единица развертывания - это пакет, поэтому я рекомендую разделить две службы на две группы. В противном случае удаление существующего пакета, естественно, также приведет к сбою Service B.

В качестве альтернативы, если API / интерфейс находится в отдельном пакете, вы можете развернуть новую реализацию службы для A в отдельном пакете, с более высокий приоритет и переназначить все виды использования сервиса. Что обычно довольно запутанно, так что это отдаленная рекомендация второго места.

Редактировать: Вы комментируете, что объединяете сервисы в пакет, чтобы минимизировать количество банок, но хотите обновить сервисы независимо. Специально для минимизации количества банок: Вы пытаетесь решить проблему, которая у вас действительно была? Я в основном работаю с Liferay, который полностью OSGi, и простая ванильная установка поставляется с более чем 1000 пакетами - среда выполнения справляется с этим просто отлично. Убедитесь, что вы не осуществляете упреждающую оптимизацию того, что не требует оптимизации.

Если ваши компоненты имеют разные интервалы обслуживания, разверните их в разных пакетах. Период. Бесполезно работать против системы, у которой вообще нет проблем с количеством пакетов.

...