IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Gestion de la Session et des Transactions


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Par défaut Gestion de la Session et des Transactions
    Bonjour,

    J'ai de gros problèmes avec la gestion de ma session et je me retrouve souvent avec des exceptions de type LazyInitializationException accompagné d'un "no session or session was closed".

    En fait c'est surtout les transactions qui me posent problème. A quel moment je dois faire un session.beginTransaction() ?
    Certaines opérations n'ont pas besoin d'avoir de transactions ouverte et pour d'autres ça va déclencher une exception donc on est plus ou moins obligé de faire un session.beginTransaction() dès le début et de la laisser ouverte puisqu'un commit de la transaction ferme la session. Si derrière on charge ou on update d'autres données on se tape une exception avec "no session or session was closed".
    On ne peut pas non plus enchainer plusieurs petites transactions puisqu'au commit de la première transaction on ferme la session

    Etaler une transaction (au sens API du terme, avec la classe Transaction) sur plusieurs minutes (le "user think time") ça rime à quelque chose ?

    J'ai lu pas mal de fois la doc ainsi que les petits guide du wiki d'hibernate mais j'ai l'impression de confondre le rôle de la session et des transactions.
    Le plus perturbant c'est qu'une transaction hibernate n'a rien à voir avec une transaction au sens SGBD qui se rapprocherait plus de la session hibernate. C'est à devenir fou

    De quelle façon gérez-vous tout cela dans vos clients lourds ?

    Je vous remercie d'avance pour vos conseils

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    si tu travaille avec getCurrentSession(), la session hibernate est automatiquement liée à la transaction et fermée lors du commit. C'est utile quand ta session a une courte durée de vie (temps d'une requete HTTP ou de la consultation d'un EJB, par exemple). Si ta session doit vivre plus longtemps (Session in view pattern), tu dois gérer toi meme la session en faisant des SessionFactory.openSession(). Dans ce cas tu pourra mettre plusieurs begin/commit, la session ne se fermera que si tu fait un session.close().

  3. #3
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Par défaut
    En effet, cela me semble plus cohérent !

    Est-ce que je dois modifier quelque chose dans le fichier de configuration ?
    Je pense notamment à cette ligne là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="current_session_context_class">thread</property>
    Mais elle n'est utile que pour le getCurrentSession() j'imagine ?

    En tous cas merci pour ta réponse

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par julien.1486 Voir le message
    Mais elle n'est utile que pour le getCurrentSession() j'imagine ?
    Exactement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion des transactions avec les composants DOA
    Par lper dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/12/2008, 16h06
  2. [Data] Gestion des transactions
    Par hlr dans le forum Spring
    Réponses: 2
    Dernier message: 21/02/2006, 09h47
  3. Gestion des transactions - Gestion des erreurs
    Par devdev dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 23/03/2005, 20h17
  4. gestion des transactions
    Par viny dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/03/2004, 21h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo