Потребление услуг и шаблон доски - PullRequest
0 голосов
/ 04 октября 2018

Шаблон доски используется повсеместно в OSGI.У меня есть одно сомнение, связанное с этим, которое, я надеюсь, вы поможете прояснить.

У меня есть компонент P, реализующий плагин службы.Служба модифицирует системный компонент R (который использует все службы типа Plugin в качестве динамической ссылки) и его поведение.

Теперь у меня есть служба X, которая зависит от R и полагается на это измененное поведение.Мне нужно быть уверенным, что P на самом деле был выбран R, прежде чем я смогу использовать его в X. До сих пор это делалось в зависимости от P во всех компонентах, которые потребляли R.

Теперь я не уверен, что этодостаточно, поскольку предполагается, что, как только P переходит в оперативный режим, методы связывания всех компонентов, которые зависят от него, вызываются до того, как какие-либо компоненты будут фактически активированы.

Я не обнаружил ни одной спецификации OSGI, которая бы это гарантировала.Если нет, то есть ли способ узнать это?

1 Ответ

0 голосов
/ 04 октября 2018

Да, вы правы, это небезопасная ситуация.Хотя части OSGi выполнены идеально, работа R над P создает условия гонки.

Так что лучшим решением является ... ??? доска.Если возможно, зарегистрируйте X в качестве службы интерактивной доски, поднятой R. В этом случае ответственность R заключается в том, чтобы подобрать P, обработать их соответствующим образом и затем вызвать X. Это не тривиальный код, чтобы сделать это правильно, поскольку вы можете получить add(P)/remove(P) одновременно сadd(X)/remove(X).Тогда это был бы хороший другой SO вопрос: -)

Если вы не можете изменить R, то нет хорошего решения, о котором я знаю, потому что у вас есть скрытая зависимость.R создает новую ситуацию для P, но не дает правильной точки, в которой вы реагируете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...