IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Plateformes réactives et architectures modulaires Java Discussion :

Gestion d'identifiants d'objets contenus dans une Map qui transite entre 2 bundles


Sujet :

Plateformes réactives et architectures modulaires Java

  1. #1
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut Gestion d'identifiants d'objets contenus dans une Map qui transite entre 2 bundles
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map.put("CAR_NAME", car.getName());
    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.

    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.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  2. #2
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    Bonjour Laurent,

    Dans mon cas, j'applique toujours la solution 1.

    J'ai à chaque fois une bundle (plugin) API qui contient toutes les constantes de mon application et tous les API d'échanges (interface et classe pour DTO).

    Par conséquent dans ton cas tu auras 3 bundles : bundleA, bundleB et bundleAPI.

    De cette façon cette solution résout le problème de dépendance cyclique.

    A noter que ce type de décomposition n'est pas nouveau dans le monde Java mais au moins elle est bien cadrée. C'est un pour cela qu'on se retrouve avec un gros sac de noeud dans certaines applications.

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  3. #3
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Le bundle dédié aux constantes et API reste donc préconisé, je le conçois.

    Dans mon cas je ne crains pas les dépendances cycliques, c'est simplement que par rapport à des problématiques de déploiement de mises à jour, on est contraint à éviter toute dépendance entre bundles. Donc, les bundles producteur et consommateur de données ne se connaissent pas et la communication se fait par l'intermédiaire d'un Dispatcher (dans un autre bundle) car les requêtes sont transmises de manière asynchrone, ainsi que les résultats. Cela ne remet pas en cause la solution 1 mais par contre ça induit néanmoins une dépendance vers un autre bundle. C'est sans doute gérable via une feature a priori, non ?

    La deuxième solution me paraissait de fait intéressante, dans la mesure où il n'y a pas de bundle supplémentaire à ajouter, et donc de dépendance à prendre en compte au moment du déploiement d'une mise à jour.

    Bon, sans doute vaut-il mieux rester sur la solution 1 qui est beaucoup plus dans l'esprit de la modularisation...

    Merci beaucoup Mickaël pour ton retour.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  4. #4
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour Laurent,

    Comme Mickael, je partirais sur la solution 1 (bundle API). Avec cette solution (compare a celle avec generation de code) ca te permettra d'utiliser Ctrl+Shift+G sur les constantes pour retrouver les classes Java consomateurs+producteurs.

    Je me dis aussi que ces constantes font parties du modele (bundles qui contient tes Pojo Car, etc...). Au lieu de créer un nouveau bundle API, ces constantes Java pourrait être définis dans ce bundle modele?

    Angelo

  5. #5
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Citation Envoyé par azerr Voir le message
    ca te permettra d'utiliser Ctrl+Shift+G sur les constantes pour retrouver les classes Java consomateurs+producteurs.
    En fait, ce n'est pas incompatible avec la façon dont je vois les choses... Les classes seraient générées dans des répertoires sources de toute manière.

    Citation Envoyé par azerr Voir le message
    Je me dis aussi que ces constantes font parties du modele (bundles qui contient tes Pojo Car, etc...). Au lieu de créer un nouveau bundle API, ces constantes Java pourrait être définis dans ce bundle modele?
    Dans mon exemple, c'est effectivement une donnée de modèle, lequel se trouve dans un autre bundle. Sauf que ce n'est pas toujours le cas, j'ai aussi des paramètres qui ne sont pas liés directement au modèle et de fait, je ne peux pas les placer dans le même bundle car ça ne serait pas très logique.

    Donc ok, vous penchez tous les deux pour un bundle intermédiaire.

    Merci de ton intervention également Angelo.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  6. #6
    Membre chevronné
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Points : 2 112
    Points
    2 112
    Par défaut
    Idem que les autres, je ferais un bundle dédié qui ne contiendrait que les constantes.
    Moins on code, moins il y a de bug ... et vice-versa ainsi qu'inversement ...

  7. #7
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Bon ben apparemment c'est une évidence donc la solution du bundle s'impose.

    Merci fxrobin
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  8. #8
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    Bonjour à tous,

    Je me dis aussi que ces constantes font parties du modele (bundles qui contient tes Pojo Car, etc...). Au lieu de créer un nouveau bundle API, ces constantes Java pourrait être définis dans ce bundle modele?
    Tout dépend de l'importance du projet, parfois j'ai 1 ou 2 bundle(s) en effet. Le bundle API me sert beaucoup pour définir les interfaces liées aux points d'extensions. Il arrive même que je l'appelle bundle framework.

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Identifier un objet donné dans une liste
    Par tiboleo dans le forum ASP.NET
    Réponses: 1
    Dernier message: 05/01/2010, 23h24
  2. Réponses: 9
    Dernier message: 24/06/2008, 09h45
  3. [objet] appeler une méthode d'objets contenus dans un tableau (iterator ?)
    Par psychomatt dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/09/2006, 16h28
  4. Transmission d'un objet crée dans une fonction
    Par EvilAngel dans le forum ASP
    Réponses: 2
    Dernier message: 10/05/2004, 20h19
  5. [Vb.net] Indexé un objet crée dans une boucle
    Par picpic dans le forum Windows Forms
    Réponses: 10
    Dernier message: 17/12/2003, 14h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo