Bonjour.
Suite à d'âpres combats et nuits blanches, et de solutions trafiquotées, je lance cette discussion pour vous demander vos avis et vos retours d'expériences sur le sujet.
Il s'agit de l'utilisation d'Hibernate (ou un autre framework de persistence) dans le contexte d'une application web.
Le problème se résume au mot "Lazy Fetching Exception", je ne sais pas pour vous, mais en ce qui me concerne, ça m'a pourri la vie au départ (et même quelques fois maintenant). Ce problème provient de deux causes (en général) :A travers plusieurs projets, j'ai utilisé plusieures des solutions suivantes :
- lors du rendu des views (après les appels aux DAOs et la fin des transactions du framework de persistence.
- lors des prochaines requêtes (suite à la fermeture et à la réouverture de la session du framework de persistence), lors de l'accès aux objets détachés.
Bref, je souhaitais vous demander votre avis sur la question.
- mettre toutes les associations au mode EAGER : Je sais, c'est moche et stupide, mais ça résout tout ! Assurez vous cependant, je le fais plus, c'etait à l'époque de mes premiers projets Struts-Hibernate.
- Rafraichir systématiquement les DTOs avant de leur accéder. j' ajoute une méthode refresh(id) dans mes DAOs qui retrouve mon bean via son id et le sort ainsi de l'état detached. Solution très lourde à mettre en oeuvre, rallonge le code, augmente le traffic de/vers la BD. Ceci résout le second problème.
- Déléger l'ouverture et fermeture des transactions à une couche supérieure, comme à un filtre par exemple. pas joli comme manip !
- etc..
- Ouvrir une session de persistence par utilisateur et la stocker dans sa session (web, coté serveur) : J'adore cette solution ! plus de refresh, plus de lazy fetch exceptions, etc. MAIS, pour l'utilisation de la RAM et d'espace session, bonjour les dégats ! C'est la solution que j'utilises actuellement.
P.S. : je parle d'un environnement web dans un Servlet Container uniquement, comme Tomcat par exemple. Je précise ceci pour pas que l'on me propose d'utiliser les managed sessions des EJB3 et compagnie.
En attendnt vos réponses, merci d'avance.
Partager