Я создал пакет OSGi с открытым (декларативным) сервисом. Если я, когда вызвана активация, заметьте, что что-то не так, что я не могу предоставить услугу, мне нужно предотвратить ее. На данный момент функция активации выглядит так:Каков правильный способ отключения службы OSGi при запуске службы?
public void activate(ComponentContext context, Map<String, Object> properties) {
pid = (String) properties.get(Constants.SERVICE_PID);
try {
...
}
catch(Exception e) {
context.disableComponent(pid);
}
}
Другой альтернативой является просто обернуть/распространяет исключение (или бросить новый, в зависимости), как это:
public void activate(ComponentContext context, Map<String, Object> properties) {
try {
...
}
catch(Exception e) {
throw new ComponentException("Some reason");
}
}
Я не могу найти правильное поведение, указанное в разделе декларативных услуг в OSGi Service Platform Service Compendium, но мне может быть что-то не хватает