Как поддерживать работу службы/компонента при обновлении пакета OSGI

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


person DM CHAU    schedule 14.04.2020    source источник


Ответы (1)


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

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

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

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

person Olaf Kock    schedule 14.04.2020
comment
Моя основная идея заключается в развертывании нескольких процессов/заданий в 1 файловой банке (пакете), потому что в моих системах слишком много процессов. Например, если в моей системе 70-100 процессов/заданий, мне нужно будет развернуть 70-100 банок (пакетов), и я думаю, что этот подход довольно сложно реализовать и контролировать. Поэтому я хотел бы разделить эти процессы на несколько объединенных связок (15 процессов в связке А, 15 процессов в связке В и так далее. - person DM CHAU; 15.04.2020
comment
Однако процессы в одном пакете могут обновляться независимо. После исследования я решил использовать службы OSGI в качестве своих процессов, что означает, что я использую службы OSGI для запуска и остановки своего процесса, и, похоже, он работает хорошо. - person DM CHAU; 15.04.2020
comment
У вас есть идея (подходы OSGI) для моей идеи? Я создал несколько вопросов, но никто не мог помочь. Пожалуйста, перейдите по ссылкам ниже или просто ответьте мне прямо в этой теме - person DM CHAU; 15.04.2020
comment
stackoverflow.com/questions/60724443/ - person DM CHAU; 15.04.2020
comment
stackoverflow.com/questions/60808451 / - person DM CHAU; 15.04.2020
comment
так ты имеешь в виду, что нет возможности обновить сервис OSGI самостоятельно с помощью Apache Felix? - person DM CHAU; 20.04.2020
comment
Нет, совсем наоборот: есть способ: просто упакуйте все, что вы хотите развернуть независимо, в независимые пакеты. Не беспокойтесь о количестве пакетов. - person Olaf Kock; 20.04.2020
comment
Не могли бы вы поделиться со мной некоторыми примерами (может быть, исходным кодом в github)? Я также слышал о Composite Bundle, но не могу найти код в деталях. - person DM CHAU; 20.04.2020
comment
Вы уже говорите Я реализовал 2 сервиса A, B в своем комплекте: Просто реализуйте сервис A в A.jar, а сервис B в B.jar — вы знаете, как реализовать сервисы, все, что я вам нужно упаковать их, чтобы вы могли повторно развернуть пакет, если хотите повторно развернуть службу. Просто примите, что пакеты — это единица развертывания (с наименьшим сопротивлением). - person Olaf Kock; 20.04.2020
comment
Есть ли способ создать несколько пакетов из 1 проекта eclipse? потому что каждый проект имеет только 1 pom.xml, который определяет только 1 ‹Bundle-Activator›. Или я должен создать проект A для сборки jar A и проект B для сборки jar B? - person DM CHAU; 20.04.2020
comment
Этот последний комментарий на самом деле является новым вопросом, а не разъяснением ИМХО. Какую проблему в любом случае решит несколько пакетов из одного проекта? Очень похоже на x-y-проблему. Нет ограничений на количество проектов, которые может обрабатывать eclipse, и нет ограничений на количество пакетов, которые может обрабатывать среда выполнения OSGi. Решите, хотите ли вы, чтобы ваши проекты были независимы друг от друга или объединены в единое целое, а затем придерживайтесь своего решения. Но решите за одно: не пытайтесь бороться с системой, потому что ваша первоначальная идея была другой. - person Olaf Kock; 20.04.2020