Rechercher les services OSGI par propriétés
Comment puis-je distinguer publié OSGI services de mise en œuvre de même interface par leurs propriétés?
source d'informationauteur John Smith | 2012-06-22
Vous devez vous connecter pour publier un commentaire.
En supposant que vous souhaitez récupérer services enregistrés fondé sur certaines valeurs pour les propriétés, vous devez utiliser un filtre (qui est basé sur la LDAP syntaxe).
Par exemple:
où vous voulez regarder pour les services à la fois la mise en œuvre de
MyInterface
et ayant une valeur de laport
bien égal àmyport
.Ici est la javadoc pour obtenir les références.
Remarque 1:
L'exemple ci-dessus et javadoc reportez-vous à la Version 4.2. Si vous n'êtes pas limité à un J2SE 1.4 de l'exécution, je vous suggère de jeter un oeil à la Version 4.3 la syntaxeoù vous pouvez utiliser des génériques.
Remarque 2: (avec l'aimable autorisation de Ray)
Vous pouvez également vérifier l'exactitude de votre filtre par la place de la création d'un Filtre objet à partir d'une
filterStr
chaîne:qui vous permet également de faire correspondre le filtre avec d'autres critères. Vous avez encore passer
filterStr
pour obtenir les références, car il n'y a pas de surcharge que représente uneFilter
argument. S'il vous plaît être conscient, cependant, que cela vous permettra de vérifier l'exactitude à deux reprises: à la foisgetServiceReferences
etcreateFilter
jeterInvalidSyntaxException
sur l'analyse du filtre. Certainement pas un show-bouchon inefficacité, je suppose, mais il vaut la peine de mentionner.Luca la réponse ci-dessus est correcte, mais il suppose que vous utilisez le faible niveau de l'API pour l'accès aux services.
Si vous utilisez Déclarative des Services (qui, je le recommande généralement) ensuite, le filtre peut être ajouté à la
target
attribut de la référence de service. Par exemple (à l'aide de la bnd annotations pour la DS):En Plan, vous pouvez spécifier l'attribut filter sur la référence ou de référence d'un élément de liste. Par exemple: