2017-06-16 1 views
1

J'ai un composant OSGi:moyens valides pour interrompre un composant OSGi d'être activé

@Component(immediate=true) 
public class SomeComponent implements SomeInterface {...} 

Notez que le composant est immédiat. De plus, étant donné que la classe de composant met en œuvre une interface, je comprends qu'un service sera automatiquement enregistré lors de l'activation du composant.

Maintenant, je voudrais être en mesure d'interrompre dynamiquement l'activation du composant et l'enregistrement du service si certaines conditions sont remplies. Lancer une 'ComponentException' dans un activateur de composant ne semble pas faire l'affaire:

@Activate 
public void activate() { 
    if (notReady) 
    throw new ComponentException("Component not ready"); 
} 

Des suggestions? Merci!

Répondre

2

Vous ne pouvez pas préempter l'enregistrement de service qui se produit avant l'activation. Vous seriez mieux avec deux composants. Un qui est immédiat avec aucun service qui décide d'activer ou de désactiver le deuxième composant qui a le service. Ce deuxième composant peut être désactivé par défaut.