Ho creato un bundle OSGi con un servizio esposto (dichiarativo). Se io, quando viene chiamato l'attivazione, noti che qualcosa non funziona in modo tale da non poter fornire il servizio, ho bisogno di impedirne l'esposizione. Al momento la funzione di attivazione si presenta in questo modo:Qual è il modo corretto di disabilitare un servizio OSGi all'avvio del servizio?
public void activate(ComponentContext context, Map<String, Object> properties) {
pid = (String) properties.get(Constants.SERVICE_PID);
try {
...
}
catch(Exception e) {
context.disableComponent(pid);
}
}
Un'altra alternativa è quella di avvolgere solo/propagare l'eccezione (o lanciare uno nuovo, a seconda) in questo modo:
public void activate(ComponentContext context, Map<String, Object> properties) {
try {
...
}
catch(Exception e) {
throw new ComponentException("Some reason");
}
}
non riesco a trovare il comportamento corretto specificato nella sezione sui servizi dichiarativi nello OSGi Service Platform Service Compendium, ma potrei mancare qualcosa