« Hibernate, ce grand incomprisPOJO strikes back »

10 commentaires

Commentaire de: Fabien Bezagu [Visiteur] · http://fabien.bezagu.free.fr
Dans son livre Applying Domain Driven Design and Patterns, Jimmy Nilsson laisse la parole à un intervenant, Mats Helander, pour la partie UI.
Contrairement à une approche d'utilisation de haut en bas des POJO du domaine, Mats Helander invoque le besoin d'avoir un modèle de présentation (PM) connecté au modèle du domaine (DM). Cela est nécessaire pour ajouter des propriétés et des méthodes de présentation qui pollueraient les classes du domaine : par exemple, le nom complet d'une personne, qui est la concaténation du prénom et du nom. Il évoque ensuite les deux solutions que sont le mapping et le wrapping pour faire parler les deux modèles.
Je me laisse petit à petit séduire par cette idée et je pense finalement que tu as peut-être tout à gagner avec ta solution DTO (je suis pas convaincu que ce soit le terme idéal).
Au plaisir de te relire.
14.02.07 @ 09:43
Commentaire de: Nicolas De Loof [Visiteur]
J'ai le même genre de soucis avec les POJO pas tant POJO que ça d'hibernate...

As tu essayé d'utiliser tes beans modèle (les "vrais" POJO) comme cible pour Dozer afin d'y recopie le contenu des proxies hibernate ?

Client$EnhancedByCGlib -> [Dozer] -> Client

Ceci ne lèvre pas le problème du Serializable, mais ça évite au moins de construire un nouveau graphe objet pour chaque méthode métier.
14.02.07 @ 15:06
Commentaire de: Bruno Marchesson [Membre] Email
Bonjour Nicolas,

La solution que tu préconises pose le problème du chargement du graphe d'objet sans son entier. De deux choses l'une : soit la session Hibernate est fermée, et Dozer s'arrête à cause d'une LazyInitializationException à le première propriété non chargée; soit ta session est ouverte, et dans ce cas, Dozer appelle tous les getters du POJO Hibernate, et là tout ton objet est chargé, ce qui peut être très, très volumineux...

Je ne m'avoue pas vaincue et j'espère trouver une solution élégante sous peu...

Bruno
15.02.07 @ 20:39
Commentaire de: Gengis [Visiteur]
"et Dozer s'arrête à cause d'une LazyInitializationException à le première propriété non chargée"

Il s'arrète complètement ou passe à la propriété suivante ? Si GWT faisait ce travaille (try catch à chaque accès à une association) le problème serait résolu, non ? Je pars du principe que la session est fermé. Reste l'interface IsSerializable et les datetime.
15.02.07 @ 23:40
Commentaire de: Bruno Marchesson [Membre] Email
Dozer s'arrête complémentement, même si le flag "stopOnErrors" est false... tout cela parce que la librairie essaie de logger son erreur et la re-provoque de fait :-/ !!!!!
Bref, il s'agit d'un bug, mais en l'état, la duplication est complétement arrêtée.
16.02.07 @ 13:37
Commentaire de: Nicolas De Loof [Visiteur] · http://blog.loof.fr
Effectivement on cumule les problèmes :
- incompatibilité de GWT avec Serializable (ce qui me semble aberrant) rendant impossible d'utiliser les objets du modèle
- stopOnErrors non supporté correctement par Dozer rendant impossible la recopie "génrique" des HJO en DTO
- utilisation de proxies par hibernate.

Je vois mal comment Hibernate peut se passer de proxies si on veut conserver les facilités du lazy-loading. La gestion du LazyInitializationException devrait (?) pouvoir être prise en charge de manière générique, avec un Dozer corrigé par exemple.

Reste le problème du Serializable et des types dérivés utilisés par Hibernate. Dozer doit pouvoir assurer la conversion des sqlDateTime en Date, non ?
Pour l'héritage avec Serializable, il s'agit d'une limitation de GWT qui est extrêmement structurante, cette interface étant utilisée un peu partout... Je n'ai pas encore expérimenté GWT aussi je ne sais pas dans quelle mesure on peut le customizer ou l'étendre.
19.02.07 @ 10:33
Commentaire de: Xavier Brénuchon [Visiteur]
On commence donc déjà a voir paraitre le problème n° 1 de GWT : il n'est pas open source.
On dépend donc du bon vouloir de Google pour qu'il fasse évoluer son produit pour le rendre + compatible avec Hibernate.
Mais est-ce que la compatibilité avec Hibernate est prioritaire pour Google ?
En open-source, la communauté java aurait pu développer cette fonctionnalié en réponse au réel besoin dont tu fais part.
19.02.07 @ 18:36
Commentaire de: Guy Merlin [Visiteur]
Salut Nicolas


Je partage également ton idées par rapport à la conversion des objets Hibernate en DTO pour une utilisation avec GWT. Pour le faire aisément, il suffirait d'implémenter au niveau de la couche service une sorte d'Assembleur qui se chargerait d'attacher et de détacher les objets Hibernate. (Conversion Objet Hibernate vers DTO et vice-versa)


L'utilisation d'un générateur pour produire les DTOs à partir de la configuration ou des annotations Hibernate éviterait de coder tout cela.
20.02.07 @ 16:01
Commentaire de: Bruno Marchesson [Membre] Email
Bonjour à tous,

Quelques réponses en vrac :
- le support de Sérializable est prévu sur la roadmap GWT : on peut donc espérer que ce problème soit résolu sous peu.
- GWT est complétement Open-Source depuis la version 1.3. Cela concernen tout autant les Widgets que le framework et le compilateur Java/JavaScript.
21.02.07 @ 10:42
Commentaire de: Pierre Bev [Visiteur]
Petite info : l'obligation d'implémenter IsSerializable n'existe plus mais devient effective pour Serializable.
Ça fait déjà un problème de résolu par Google
22.08.08 @ 05:24

Laisser un commentaire


Votre adresse email ne sera pas révélée sur ce site.

Votre URL sera affichée.
(Les retours à la ligne deviennent des <br />)
(Nom, e-mail & site Web)
(Autoriser les utilisateurs à vous contacter par un formulaire de message (votre adresse email ne sera not révélée.))
This is a captcha-picture. It is used to prevent mass-access by robots.
Please enter the characters from the image above. (case insensitive)