2010-02-04 3 views
2

Le OSGi ConfigAdmin passe une instance dans le dictionnaire ManagedService.updated(); le service doit alors extraire les nouvelles valeurs du dictionnaire. C'est génial et fonctionne bien, mais une chose que je n'ai pu trouver nulle part est de savoir si les types de valeurs du dictionnaire sont supposés être spécifiques (Integer, Long, Float, Boolean) ou génériques Strings que le service géré analyse ensuite/convertit en un format approprié par lui-même, au lieu d'attendre le type de valeur correct.OSGi ConfigAdmin pas clair sur les types de valeur pour la mise à jour Dictionnaire

Cette différence semble anodine, mais a des conséquences très graves pour le couplage sous-système/couche, comme le créateur du dictionnaire et un ManagedService ont évidemment d'accord sur les types de valeur.

Je jusqu'à présent pas été en mesure de trouver une recommandation à ce sujet; La spécification et pratiquement tous les exemples existants ignorent complètement le problème et utilisent des types spécifiques ou des chaînes non typées.

Suis-je manque quelque chose ou est-ce vraiment underspecified?

Répondre

6

Il y a deux réponses à cela. Tout d'abord, jetez un oeil au service MetaType, qui permet à vos bundles configurés de déclarer tous les champs et types qu'ils acceptent.

Mais à mon humble avis, il est préférable de faire vos implémentations ManagedService (usine) robuste face à une variété de formats de données. En particulier, assurez-vous qu'ils sont toujours capables de gérer les chaînes en dernier recours, même si un autre type de données est préféré. En effet, certains agents de gestion ignorent le service MetaType ou sont incapables de fournir des données en tant que types autres que Strings. Felix FileInstall est un bon exemple: il lit simplement un fichier de propriétés, traitant tout comme une chaîne.

Soyez stricts dans ce que vous envoyez, mais généreux dans ce que vous recevez.

+1

Le service MetaType était exactement la pièce manquante du puzzle. Merci! –

Questions connexes