Bonjour,
Pour des problématiques de performances et de sérialisation, j'ai besoin de pouvoir faire transiter des maps d'objets de types simples, tels que des String, Long, ..., entre différents bundles.
Plusieurs objets étant stockés dans une Map, il est donc nécessaire de leur donner à chacun un identifiant, ce qui en général se matérialise par l'utilisation d'un objet de type String. Par exemple :De fait, l'utilisation de la chaine "CAR_NAME", codée ici en dur, n'est bien entendu pas très indiquée, puisqu'au moindre besoin de refactoring ou de modification, il ne faudra surtout pas oublier de corriger partout cette chaine qui sert d'identifiant. C'est pourquoi, pour chaque identifiant d'élément de Map, j'ai besoin de créer une constante. Jusque-là rien de plus normal quand on veut éviter les bugs au runtime.
Code : Sélectionner tout - Visualiser dans une fenêtre à part map.put("CAR_NAME", car.getName());
Donc, comme il est dans mon cas nécessaire de rester simple et d'éviter à tout prix de véhiculer par la Map, des objets plus complexes que des String, Long, ..., je dois me contenter de ce moyen pour faire transiter les données entre les bundles.
Concernant l'aspect "identifiant d'objet dans une Map", je ne pense pas qu'il y ait de moyen plus efficace. De fait, la difficulté qui en découle, est de parvenir à définir et à exploiter les identifiants, de manière découplée, entre le bundle producteur de la donnée et le bundle consommateur de la données.
En d'autres termes, il est facile de créer une constante String pour chaque identifiant d'objet de Map mais où place-t-on celles-ci, sans créer de dépendance forte d'un bundle vers un autre et sans créer de redondance ?
A cela je vois deux solutions :
1 - Créer un bundle spécifique qui embarquera seulement une classe avec uniquement les constantes, que les bundles producteur ou consommateur des données devront référencer afin de pouvoir exploiter celles-ci.
2 - Faire en sorte d'avoir physiquement et automatiquement la classe de constantes présente dans chacun des projets des bundles qui la nécessitent, via l'utilisation d'un outil de génération (lequel prendrait en entrée un fichier de définition des constantes). Ainsi, lors de l'exécution de la génération, la classe de constantes est créée puis dupliquée où cela est nécessaire. Le développeur peut alors utiliser les constantes dans le code du bundle sans avoir de problème de compilation.
Voilà, donc actuellement je suis plus pour partir sur la deuxième solution car je ne vois pas la première comme une solution satisfaisante (mais peut-être que je me trompe).
Je ne vois pas trop d'autre possibilité mais je serais content d'avoir des avis ou des suggestions.
Je débute avec OSGi donc il est possible que je ne sois pas encore tombé sur des informations intéressantes à ce sujet...
Pour information, le projet sur lequel je travaille a de fortes contraintes en terme de charge, de traitements temps réel, doit fonctionner dans un mode distribué, en asynchrone, via des WebServices, du JMS et sur 2 sites distincts. Donc les questions d'optimisation se posent dès à présent...
Merci d'avance pour votre aide.
Partager