Динамический обмен данными между 2 плагинами Eclipse rcp - PullRequest
0 голосов
/ 30 сентября 2019

Предположим, что в приложении eclipse rcp доступны два плагина P1 и P2.

И P1, и P2 создаются отдельно в зависимости от процесса сборки

В моем сценарии, в зависимости только от выбора пользователяp1, только p2 или оба плагина доступны в базовом продукте.

Я хочу обмениваться данными между плагином P1 и P2, когда оба плагина доступны, иначе плагины будут работать со своими собственными данными.

Будут ли хорошо работать декларативные службы OSGI в моем сценарии,

есть ли способ, которым я могу предоставить API-интерфейсы служб, которые возвращают json или строку из плагина P1 и P2 и могут потреблять их в зависимости от этого явно,Я имею в виду, что плагин p2 должен потреблять его только тогда, когда существует p1, в противном случае он должен функционировать как обычно.

Добрый совет.

Редактировать: Спасибо за предложение

IПолностью согласен, что иметь общий плагин будет идеально.

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

Плагин P1 и P2 - это два разных продукта, которые работают независимо друг от друга, но имеют данные, которые можно дополнять друг другом. Мы хотели бы сделать вызов API из плагина p2, если плагин p1 встроен в базовый продукт и использует данные для дополнения существующих представлений в p2, в противном случае показываются только данные p2.

Я предположил, используя деклятивные сервисыПлагин P2 может вызывать API, предоставляемые плагином P1, используя API спецификации osgi, которые являются частью стандартных плагинов Eclipse, без добавления какой-либо зависимости между плагинами P1 и P2. Пожалуйста, дайте мне знать, если есть какой-либо вариант добиться этого.

1 Ответ

1 голос
/ 30 сентября 2019

Конечно, вы можете иметь необязательные зависимости, но я бы рекомендовал ввести P3 для хранения общих данных. Сделайте P1 и P2 зависимыми от этого плагина и просто безоговорочно извлекайте данные из обычного плагина хранения.

Если вы делаете P1 зависимым от P2 (и наоборот), вам нужно сделать эту зависимость необязательной, и вы вводите циклическую зависимость времени компиляции обоих. Отличный способ разрешить такой цикл - ввести общий третий модуль, который просто реализует общие потребности.

Редактировать: Отвечая на ваши комментарии - если у вас есть P1, зарегистрируйте сервис, на который ссылается P2, тогда P2 будетзависит от P1 для интерфейса службы, если только вы не зарегистрируете класс из общего P3, от которого зависят оба. При этом ничто не мешает вам регистрировать произвольные классы JRE в качестве службы - это было бы нетрадиционно и странно, но я думаю, вы могли бы зарегистрировать HashMap в качестве службы. Это кажется нечистым, вонючим, хакерским и странным - и разработчики вашего кода могут преследовать вас, но я думаю, технически это возможно. Я говорил, что не рекомендую этого и что это уродливо?

...