Как получить содержимое файла конфигурации для некоторого пакета OSGI Bundle - PullRequest
0 голосов
/ 14 июля 2020

У меня следующая структура:

-- bundles
---- nicebundle
------ src
-------- ...
-------- nicebundle.config
---------- NiceConfig.java
-------- ...
----  mybundle
------ ...
----  another bundles...

-- features
----  nicebundle.config.feature
------  rootifles
--------  config.cfg
------  ...
----  another features...

В config.cfg есть некоторые константы, которые я хочу использовать в mybundle (в методе activate()). То, что у меня есть в NiceConfig.java для nicebundle, - это NiceConfig @interface, который просто зеркально отображает весь контент из файла .cfg, например String importantString();, а в файле .cfg есть соответствующая запись: importantString=Hello

Для nicebundle вы можете просто загрузить объект NiceConfig, вызвать методы и получить необходимые константы, например:

@Activate
public void activate(final NiceConfig niceConfig) {
    String compositeString = niceConfig.importantString() + " World"; // receive "Hello World"
    ...

Что я хочу - сделать то же самое, но в mybundle. Однако, когда я делаю то же самое, niceConfig.importantString() возвращает null, а не «Hello». Я думаю, что пропускаю что-то очень простое и очевидное, но у меня вопрос: как мне получить содержимое файла .cfg, расположенного так, как я указал выше (я не могу его изменить) в mybundle?

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Declarative Services (DS) приведёт свойства компонента к типу аннотации, например к вашему типу NiceConfig. Но свойства компонентов берутся из конфигураций компонент и в Configuration Admin .

DS ничего не знает о каком-то файле конфигурации в функции Eclipse. А функции Eclipse даже не являются установленными пакетами, поэтому они все равно не видны во время выполнения.

Вы можете использовать реализацию спецификации Configurator для предоставления свойств из ресурса в вашем пакете в соответствующий Конфигурация Конфигурация администратора для вашего компонента DS. Но это потребует некоторых структурных изменений, чтобы переместить файл конфигурации из функции в ваш пакет.

0 голосов
/ 17 июля 2020

Короче говоря, правильным ответом для меня было выполнить следующие шаги:

  1. указать новый PID в .cfg-файле в квадратных скобках, например [VeryNiceConfig], а затем указать все мои параметры после этой строки в квадратных скобках, например VeryNiceInt=42

  2. добавить configurationPid = "VeryNiceConfig", configurationPolicy = ConfigurationPolicy.REQUIRE к аннотации @Component.

  3. и затем добавьте мой объект Config @interface в качестве параметра к методу activate() моего пакета и используйте его для славы.

Это не работает в eclipse, потому что .cfg- Файл добавляется через эту функцию, и нет прямого ввода в eclipse.exe, но он работает после (в моем случае) сборки maven.

...