Je rencontre des problèmes avec les composants de la commande chargés lors de l'utilisation des services de déclarations OSGi via Karaf.Plusieurs références et dépendances avec des services déclaratifs
J'ai cette situation:
@Component
public class A implements IA
{
doSomething() {...}
}
@Component
public class B implements IB
{}
@Component
public class C implements IC
{
@Reference
IA a
@Reference
(cardinality = ReferenceCardinality.MULTIPLE,
policyOption = ReferencePolicyOption.GREEDY,
unbind = "doUnRegister")
void doRegister(IB b)
{
a.doSomething()
}
void doUnregister(IB b)
{
...
}
}
A, B et C sont trois faisceaux distincts.
Lors de la mise à feu de Karaf, un B est enregistré et doRegister est appelé. Cependant: le service A n'est pas prêt (a est nul).
J'ai essayé les éléments suivants:
- régler le niveau de départ de A à quelque chose inférieur à B ... N'a pas travaillé
- pour ramasser les enregistrements de B dans un travail liste et utiliser en fait une plus tard, quand C a été activé. N'a pas fonctionné et le code était encombré.
- recherché pour un moyen d'écrire cette exigence à travers l'annotation sur doRegister - pas possible.
- J'ai essayé d'utiliser un localisateur de service et d'obtenir le contexte grâce à une méthode d'activation sur C - N'a pas travaillé, il s'est écrasé Karaf.
Je dois clairement manquer quelque chose, y at-il quelqu'un qui a connu des problèmes similaires et trouvé une solution?
MISE À JOUR: Référence A a changée en IA a. Ajout d'informations oubliées sur la référence B().
Vos classes d'exemples sont-elles complètes? Est-ce que B peut-être implémenter et interfacer et A non? –
Merci de m'avoir signalé. Mais oui A, B, et, C sont soutenus par des interfaces et le problème demeure. –
Pouvez-vous poster un petit exemple complet à github ou similaire? –