-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: LazyInitializationException
PostPosted: Fri Jun 06, 2008 9:48 am 
Newbie

Joined: Fri May 30, 2008 9:05 am
Posts: 18
Bonjour à tous,

encore un nouveau post, à propos des sessions & co.

Pour utliliser dans une JSP une entité possédant un attribut LAZY (typiquement pour moi, des collections, avec oneToMany ou autre), il faut être dans une session.

Dites moi si j'ai mal compris, mais:

Quand on est dans un EJB, cela ne pose aucun problème car les méthodes, pour les stateless par exemple, s'occupent de cette gestion des session.
Mais si on se trouve dans la vue, il faudra se débrouiller, d'une façon ou d'une autre, pour se retrouver dans une session.

D'après ce que je vois un peu partout, on a l'habitude d'utiliser des filtres pour cela, mais deux choses:
1) Je ne suis pas très familier de ce genre de méthodes pour l'instant ( ca c'est pas un gros problème, je vois bien le principe ).
2) Ces filtres utilisent des classes provenant d'Hibernate, ce qui me pose la question de la portabilité!

Une autre solution que j'ai vue est d'utiliser de l'EJB-QL pour récupérer la collection définie en LAZY avant de la retourner à la vue.
Mais cela me parait particulièrement bizarre car:
1) On casse l'intérêt de l'annotation @oneToMany, puisqu'on écrit explicitement la requête qui devrait être gérée par les annotations.
2) On casse aussi l'intéret du lazy puisque maintenant la collection va rester présente hors session, donc même lorsqu'on n'en veut pas, donc pas LAZY.

Il y a probablement des petites erreurs de raisonnement dans ma vision des choses, surtout n'hésitez pas à me corriger.

Toujours est il que j'ai testé autre chose qui fonctionne, et je voudrais votre avis à ce sujet:
Ma solution consiste simplement à cloner les entités dont on a besoin.
Par exemple, supposons que l'on veuille, dans une vue, récupérer une entité personne composée d'une collection d'addresses en fonction de son nom, alors on aura dans notre EJB stateless "manager" une méthode getPersonByName(String name) qui recherchera la personne, et notre entité personne aura une méthode clone. C'est donc ce clone que l'on retournera!

Je vois bien un désavantage évident, la mémoire utiilisée par le clonage, mais à bien y réflechir, dés que la méthode getPersonByName sera terminée, la collection étant en lazy, la mémoire associée sera déchargée (non?). L'autre désavantage est qu'il faudra d'autres méthodes dans l'EJB stateles "manager" pour synchroniser les données clonnées avec lesentités persistante.


Voila voila, descendez moi pour toutes les bétises que j'ai du dire! :)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.