Декларативные службы OSGi и администратор конфигурации

Пишу бандл с использованием декларативных сервисов. Для настройки я использую свойства в объявлении DS. Эти реквизиты обычно могут быть изменены администратором конфигурации, но они не сохраняются. После перезапуска контейнера компонент имеет значения по умолчанию.

Я использую Config admin следующим образом:

Configuration c = configurationAdmin.getConfiguration(UserAgent.SERVICE_PID, null);
System.out.println(c.getProperties()); // every time is null!
Dictionary props = new Hashtable();
props.put(UserAgent.PROPERTY_PORT, 5555);
c.update(props);

и в компоненте у меня есть:

// ...

@Modified
public void updated(ComponentContext context) {
    config = context.getProperties();
    init();
}

@Activate
protected void activate(ComponentContext context) {
    config = context.getProperties();
    init();
}
//...

Я использую Felix, файл свойств хранится в кеше

service.bundleLocation="file:bundles/cz.b2m.osgi.phonus.core_1.0.0.SNAPSHOT.jar"
service.pid="cz.b2m.osgi.phonus.sip"
port=I"5555"

Но после перезагрузки не загружается. Что я делаю неправильно? Спасибо за все советы.


person Jakub Truneček    schedule 30.05.2012    source источник
comment
К вашему сведению, вы можете использовать сигнатуру ‹operation›(свойства карты) для операций активации/деактивации/изменения, чтобы избежать использования OSGi API в вашем коде.   -  person sully6768    schedule 31.05.2012


Ответы (1)


Проблема была в Pax Runner, который каждый перезапуск (чистый) стирал папку данных пакета Config Admin.

Чтобы убедиться, что Pax Runner не очистит данные, вы можете использовать флаг --usePersistedState=true.

person Jakub Truneček    schedule 30.05.2012