Не удается получить ссылку на ConfigurationAdmin в RAP
Я пытаюсь настроить osgi-jax-rs-connector в моем приложении RAP.
README говорит использовать конфигурационную службу администратора для конфигурации.
ServiceReference caRef = context
.getServiceReference(ConfigurationAdmin.class.getName());
Код выше всегда возвращает null
для ServiceReference
, Как правильно получить ссылку на Configuration Admin. Нужно ли запускать другой пакет раньше?
2 ответа
Попытка получить ServiceReference таким способом настраивает себя на случай катастрофы. Этот код не может обработать 99% случаев того, что происходит в OSGi: администратор конфигурации может отсутствовать, пакет администратора конфигурации запускается после вас, пакет администратора конфигурации находится на другом начальном уровне, пакет администратора конфигурации останавливается и конфиг админ обновлен. Ядро OSGi API является очень мощным и используется многими промежуточными программами, но его никогда не следует использовать для кода приложения, поскольку оно требует глубокого понимания базовой модели и очень подвержено ошибкам.
Безусловно, самым простым и надежным решением является использование декларативных услуг (DS) с аннотациями:
@Component
public class MyClass implements MyService {
ConfigurationAdmin ca;
@Reference void setCA(ConfigurationAdmin ca) { this.ca = ca; }
public void doMyService() {
// ... you can safely use ca
}
}
И Гуннар может быть прав, возможно, не установил службу администратора конфигурации. Тем не менее, с вашим текущим фрагментом ваш код будет взорван в любом случае в другое время.
Если вы используете Equinox, убедитесь, что пакет Config Admin (org.eclipse.equinox.cm) установлен и запущен.