Ссылка на сервис OSGi, созданный администратором конфигурации на заводе

Я прочитал этот ответ Нила Бартлетта, в котором говорилось, что DS может заменить старый ManagedServiceFactory подход к созданию экземпляров сервисов:

Компонент можно использовать либо как синглтон (т. е. MS), либо как фабрику (т. е. MSF), добавив «configurationPolicy: require». Если вы создадите конфигурацию фабрики с заводским PID, таким же, как имя компонента, вы получите фабрику.

Насколько мне известно, создание новой конфигурации с заводским PID заставляет администратора конфигурации создать новый экземпляр этой службы; действительно, это то, что происходит.

Скажем, у меня есть заводской PID test, а затем я добавляю конфигурацию для test-1 с felix-fileinstall. Затем эта служба правильно создается и активируется, когда я добавляю соответствующую конфигурацию.

If I do

@Reference(target="(service.pid=test-1)")
Test test;

это, очевидно, никогда не будет решено, поскольку требуется созданная конфигурация иметь сгенерированный GUID.

Как можно получить ссылку на этот сервис? Нужно ли мне добавлять дополнительное свойство к каждому экземпляру конфигурации для фильтрации?


person Moira    schedule 06.01.2019    source источник
comment
не уверен, что можно заставить эту ссылку работать, но если вам нужно написать PID в своем коде, это, вероятно, нехороший знак. Я бы создал еще одно свойство в конфигурации службы и отфильтровал его.   -  person awd    schedule 07.01.2019
comment
Кто произносит мое имя и пробуждает меня ото сна?   -  person Neil Bartlett    schedule 09.01.2019


Ответы (1)


Зачем вам нужно получить ссылку на этот конкретный экземпляр службы?

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

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

Например, если у меня лопнули трубы, то мне нужен сантехник, поэтому я ищу услугу типа Plumber. Если сейчас 2 часа ночи и я живу в Лондоне, мне нужен круглосуточный сантехник, поэтому я добавляю фильтр: (&(available=24hr)(location=London)). Я мог бы дополнительно уточнить фильтр с помощью (yelp_rating>=4.0). Но меня бы не заботило имя сантехника или то, что он ел на ужин.

person Neil Bartlett    schedule 09.01.2019