Ссылка на созданную фабрикой Admin службу OSGi - PullRequest
0 голосов
/ 06 января 2019

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

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

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

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

Если я сделаю

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

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

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

1 Ответ

0 голосов
/ 09 января 2019

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

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

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

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

...