Администратор конфигурации OSGi и служба MetaType - PullRequest
0 голосов
/ 13 ноября 2018

Я использую OSGi Configuration Admin для реализации некоторых базовых возможностей конфигурации в нашей программе. Теперь я начал изучать спецификацию MetaType Service , потому что мне нужна информация о типе для каждого свойства конфигурации.

Мне неясно, как эти две службы взаимодействуют. Администратор конфигурации имеет дело с практически нетипизированными парами ключ / значение. Служба MetaType знает имена и типы (среди прочего) свойств конфигурации, но не их значения. Моя цель - динамически генерировать диалог конфигурации / предпочтений для всех компонентов, которые имеют конфигурацию и соответствующую информацию о метатипах. В соответствии со спецификацией MetaType Service, сервис был задуман, чтобы охватить именно этот вариант использования. Поэтому я считаю, что это не должно быть слишком сложно

Я могу получить информацию о метатипе с помощью следующего примера кода:

ServiceReference metatypeRef = bundleContext.getServiceReference(MetaTypeService.class.getName());
MetaTypeService service = (MetaTypeService) bundleContext.getService(metatypeRef);
MetaTypeInformation information = service.getMetaTypeInformation(myBundle);

После извлечения объекта MetaTypeInformation для требуемого пакета у меня есть доступ ко всей информации, содержащейся в определении XML метатипа. В частности, можно получить доступ к ObjectClassDefinition:

ObjectClassDefinition ocd = information.getObjectClassDefinition(pid, null);
AttributeDefinition[] attributes = ocd.getAttributeDefinitions(ObjectClassDefinition.ALL);

Мои вопросы:

  • Учитывая AttributeDefinition; Как я могу получить фактическое значение базового свойства? Я знаю его имя, но не его значение.
  • Как я могу перечислить информацию о метатипах для всех компонентов во всех комплектах, которые в настоящее время присутствуют (активные и неактивные)? Я знаю, как перечислить все конфигурации через интерфейс администратора конфигурации. Может быть, есть способ получить MetaTypeInformation из Конфигурации?

1 Ответ

0 голосов
/ 13 ноября 2018

Службы конфигурации Admin и MetaType являются отдельными, но связанными спецификациями.Между ними нет жесткой связи, которая, я думаю, вероятно, является одним из основных моментов, которые помогут ответить на ваши вопросы.

По существу, Configuration Admin - это хранилище записей конфигурации.Каждая запись конфигурации имеет уникальный постоянный идентификатор (PID), и если запись конфигурации предназначена для заводской конфигурации, она также будет иметь Factory PID.Запись конфигурации также содержит несколько пар ключ-значение, где ключ всегда является строкой, а значение является одним из ограниченного набора типов.

Метатип, с другой стороны, является инструментом дляпредоставление определений конфигурации.Они описывают ожидаемую разметку ключей и значений в конфигурации, включая такие вещи, как тип значения, связанного с данным ключом, минимальный / максимальный размер значения, перечисляемый список допустимых значений и, возможно, значение по умолчанию.Каждое определение ключа / значения содержится в определении атрибута, и они сгруппированы в определении класса объекта, связанного с PID.

Важное отличие состоит в том, что Metatype ничего не знает о том, что на самом деле представляет собой конфигурация.во время выполнения (это просто информация о том, какой формы должна быть конфигурация).Точно так же Конфигурация Администратор ничего не знает о том, какой должна быть конфигурация, он просто знает, каковы текущие значения.

Следовательно:

Учитывая AttributeDefinition;Как я могу получить фактическое значение базового свойства?Я знаю его имя, но не его значение.

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

Как можно перечислить информацию о метатипе для всех компонентов во всех комплектахкоторые в настоящее время присутствуют (активные и неактивные)?Я знаю, как перечислить все конфигурации через интерфейс администратора конфигурации.Возможно, есть способ получить доступ к MetaTypeInformation из Конфигурации?

MetaTypeService - это сервис в реестре сервисов OSGi, который вы можете использовать для запроса MetaTypeInformation для данного пакета.Если вы по очереди запросите информацию о метатипах для каждого пакета, у вас будет информация, которую вы ищете.Не существует жесткой связи между администратором конфигурации и метатипом, поэтому у объекта конфигурации нет возможности узнать, существует ли для него метатип.

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