Bonjour,
NB : Je vais essayer d'expliquer mon problème. Ne maitrisant pas encore tout le jargon JAVA/J2EE/Hibernate n'hésitez pas à me demander des précisions !
Voici mon problème :
Contexte : je suis dans une équipe de développeur peu expérimentée en JAVA/J2EE, nous avons un architecte J2EE qui nous a donné des prérogatives mais qui est parti en vacances. Nous faisons face à certains problèmes et nous n'arrivons pas à trouver de solutions.
Sujet : Le site internet est un site de référencement d'acteurs économiques. L'architecture est basée sur les technos suivantes :
MySql, Hibernate, Struts.
L'architecture est la suivante :
Struts (Action, Mapping, JSP)
|
Manager
|
DAO
|
Hibernate (en mode lazy=true)
|
BD MYSQL
Dans la couche hibernate, nous avons les méthodes qui vont intéragir avec la base. Requête etc ...
La couche DAO est simplement un ensemble d'Interfaces qui donnent les méthodes à implémenter dans la couche Hibernate.
La couche Manager effectue les traitements métiers. J'imagine que c'est la couche que l'on appelle plus couramment métier ou services. Cette couche récupère des objets que notre architecte nomme DATA. Ce sont des objets Hibernate.
Dans la couche Manager, nous ouvrons/fermons la session Hibernate, nous utilisons les méthodes DAO etc.
Une fois nos objets DATA(Hibernate) récupérés, nous devons les convertir en des BEANS (nommés par notre architecte des MODEL) (il me semble que le terme plus approprié aurait été DTO) afin de les remonter à notre tier WEB.
Le problème est donc ici. Nos objets Hibernate sont souvent composés d'autres objets Hibernate. Nous ne savons pas par conséquent comment convertir ces objets Hibernate en objet Model(ou plutôt DTO).
Par exemple un objet pays (CountryData) contient une collection d'objets (ZoneTypeData).
Pour l'instant nous avons créé un ensemble de classes qui nous permettent cette conversion. Malheureusement cela ne fonctionne pas très bien. C'est très instable et pas optimum du tout. (problèmes de performances).
Un autre problème se dessine à l'horizon comment enregistrer les changements dans la base. Le tiers WEB a connaissance des objets Model(DTO), nous effectuons des modifications sur ces objets via les méthodes setteurs.
Et ensuite... ?
Devons-nous aller chercher l'objet Hibernate correspondant en effectuant une requête, modifier ses attributs en les remplissant avec les attributs du bean model et effectuer un saveOrUpdate()?
Tout ça me parait super lourd !
J'imagine qu'on s'y prend comme des manches !
J'ai donc cherché une solution à notre (nos) problème(s) en vain. J'ai aperçu des solutions comme Dozer mais je n'ai pas vu beaucoup de doc la dessus et je ne sais même pas si cela va répondre à nos problèmes.
Qu'en pensez-vous ? Quelqu'un a-t-il rencontré des problèmes similaires ?
Sommes-nous à coté de la plaque ?
Et quel est l'intéret de cette couche modèle (DTO) ?
Pourquoi ne pas remonter les objets hibernate jusqu'au tiers WEB.
J'imagine que c'est une question de couplage.
Mais de toute manière même avec cette couche supplémentaire la modification d'un objet Hibernate aura forcément des répercussions jusqu'au tier web.
Je vous avoue que je suis complètement perdu. Si vous pouviez m'éclairer ça serait pas de refus.
Merci d'avance.
Arnaud
Pour résumé : quel moyen pour convertir un objet Hibernate en un BEAN et inversement. Supprimer la couche DTO pose-t-il réellement des problèmes de couplage avec Hibernate 3.0 ?
PS : Désolé si je n'utilise pas les bons termes techniques, j'espère que vous me comprendrez quand même.
Partager