Ссылка на созданную фабрикой Admin службу OSGi
Я прочитал этот ответ Нила Бартлетта, который заявил, что 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 ответ
Почему вам нужно получить ссылку на этот конкретный экземпляр службы?
Обычно потребители сервисов должны избегать слишком многого знать о реализации, стоящей за сервисом, и, конечно, PID, вызвавший создание компонента, должен рассматриваться как внутренняя деталь реализации.
При получении услуги вы в первую очередь заботитесь о том, что делает служба - это интерфейс службы. Тогда вы можете дополнительно позаботиться о дополнительных атрибутах услуги.
Например, если мои трубы лопнули, мне нужен сантехник, поэтому я ищу услугу типа Plumber
, Если сейчас 2 часа ночи, и я живу в Лондоне, мне нужен круглосуточный сантехник, поэтому я добавляю фильтр: (&(available=24hr)(location=London))
, Я мог бы дополнительно уточнить фильтр с (yelp_rating>=4.0)
, Но мне было бы наплевать на имя водопроводчика или на то, что он ел на ужин.