-->
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: Besoin de conseil pour gestion des sessions
PostPosted: Mon Sep 21, 2009 3:08 am 
Newbie

Joined: Mon Sep 21, 2009 2:51 am
Posts: 5
Bonjour,

Depuis que j'utilise Hibernate, j'utilise une classe écrite par hennebrueder pour gérer la sessionFactory. Cette classe permet d'utiliser une sessionFactory dans l'application (la classe utilise une sessionFactory static).

Mon application java non web que je suis en train d'écrire doit interroger une base de données et récupérer toutes les entrées d'une table. Ensuite elle doit parcourir toutes ses entrées et effectuer des opérations sur certaines. Ces entrées sont liées à d'autres tables, donc au fur et à mesure du parcours, j'ai besoin d'accéder à des propriétés venant d'autres tables. Donc jusqu'à la fin du parcours des entrées, je ne peux pas fermer la session en cours.

Je n'aurais pas de difficulté si je ne devais pas durant ce parcours effectuer des opérations d'écriture dans la base. D'une part, je dois mettre à jour les objets que je parcours, et d'autre part, entrer des informations dans une table (ajouter des traces d'exécution dans une table spécifique). Mon problème est que si j'utilise la même session et que je commit mes modifications au fur et à mesure, le commit ferme la session (donc mon parcours s'arrête).

Quelle est donc la meilleure pratique pour gérer les sessions hibernates ? dois-je utiliser plusieurs sessions ? une pour la parcours, une pour les modifications, une pour mes traces d'exécution ? dois-je utiliser la même pour tout et un flush() suffira ?


Code:
public class InitSessionFactory {
   private static org.hibernate.SessionFactory sessionFactory;

   public static SessionFactory getInstance() {
      if (sessionFactory == null)
         initSessionFactory();
      return sessionFactory;
   }

   public Session getCurrentSession() {
      return sessionFactory.getCurrentSession();
   }

   private static synchronized void initSessionFactory() {
            [...]
            sessionFactory = cfg.buildSessionFactory();
            [...]
   }
}


Mes appels à la session :
Code:
   this.HibSession = InitSessionFactory.getInstance().getCurrentSession();
   Transaction Tx = this.HibSession.getTransaction();

   if (!Tx.isActive()) {
      Tx = this.HibSession.beginTransaction();
   }


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.