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 :

[session hibernate]bonnes pratiques


Sujet :

Hibernate Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 7
    Points : 8
    Points
    8
    Par défaut [session hibernate]bonnes pratiques
    bonjour,

    j'ai lu pas mal de documentation sur hibernate (notamment celle du site officiel) et j'avoue qu'il y a une question à laquelle je n'arrive pas à trouver de réponse. en effet, tantôt on dit qu'il ne faut pas utiliser une session juste pour une transaction, et quelques pages après on donne un exemple où la session est fermée juste après avoir commité la transaction. d'où les questions : est ce qu'il faut fermer la session hibernate sachant que quand j'essaye de le faire j'ai une exception session already closed? quand est ce qu'il faut fermer la session? est t il possible d'avoir un exemple d'une classe DAO qui effectue un insert, update, delete et findById?

    merci

  2. #2
    Membre actif Avatar de mOuLi
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Points : 257
    Points
    257
    Par défaut
    Il est relativement difficile de donner des bonnes pratiques Hibernate dans l'absolu. En fait c'est plutôt le besoin fonctionnel et le contexte d'exécution (site JEE ? client lourd ? programme batch ? ...) qui vont permettre de définir la meilleure solution en ce qui concerne le cycle de vie des sessions (et éventuellement des transactions).

    Pour les DAO, je déconseillerai fortement d'y faire apparaître les ouvertures/fermetures des sessions, il vaut mieux utiliser un framework qui s'en charge (Spring, EJB3/JPA ...)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Points : 83
    Points
    83
    Par défaut
    Arf, attention à l'amalgame, Spring, session EJB3 sont effectivement des outils qui permettent de démarquer des TRANSACTIONS de façon déclaratives au niveau de la couche service (notion d'unité de travail). Il faut ensuite paramétrer hibernate pour qu'il associe une session au moment ou il la crée avec la trasansaction précédemment crée.... Enfin, c'est pas simple simple quand même... mais c'est impératif de faire une gestion propre de vos sessions faute de quoi vous allez vous prendre un mur dans la face :-) avec les pb de performances, de lazy loading, ....

    Citation Envoyé par mOuLi Voir le message
    Il est relativement difficile de donner des bonnes pratiques Hibernate dans l'absolu. En fait c'est plutôt le besoin fonctionnel et le contexte d'exécution (site JEE ? client lourd ? programme batch ? ...) qui vont permettre de définir la meilleure solution en ce qui concerne le cycle de vie des sessions (et éventuellement des transactions).

    Pour les DAO, je déconseillerai fortement d'y faire apparaître les ouvertures/fermetures des sessions, il vaut mieux utiliser un framework qui s'en charge (Spring, EJB3/JPA ...)

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    Tu as toujours l'option "openSessionInView" qui permet pour une application web ( je ne sais pas si c'est ton cas ) d'avoir une session ouverte sur le thread où s'execute la requête, ce qui est bien pratique.

    Sinon je suis plutôt pour le principe de ne jamais avoir à le faire à la main, et de laisser la main à des frameworks configurables qui le feraient automatiquement à ta place, ça évite les problèmes de session non fermée et compagnie.

    A+
    K

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Points : 83
    Points
    83
    Par défaut
    ok ok je joue sur les mots mais il n'existe aucun framework à ma connaissance qui ouvre et qui ferme une session hibernate automatiquement...Spring et les ejb sessions cree une transaction et hibernate associe la session qu'ilouvre lors de la premiere invocation de sessionfactory.getCurrentSession() à la transaction en cours qui vient d'etre créee par spring ou par les ejb sessions...

    Citation Envoyé par KiLVaiDeN Voir le message
    Tu as toujours l'option "openSessionInView" qui permet pour une application web ( je ne sais pas si c'est ton cas ) d'avoir une session ouverte sur le thread où s'execute la requête, ce qui est bien pratique.

    Sinon je suis plutôt pour le principe de ne jamais avoir à le faire à la main, et de laisser la main à des frameworks configurables qui le feraient automatiquement à ta place, ça évite les problèmes de session non fermée et compagnie.

    A+

  6. #6
    Membre actif Avatar de mOuLi
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Points : 257
    Points
    257
    Par défaut
    Ben justement Spring propose (entre autres) une implémentation du pattern open-session-in-view via la classe org.springframework.orm.hibernate.support.OpenSessionInViewFilter qui va permettre de fermer la session Hibernate "au plus tard" de façon à ne pas avoir d'erreurs (notamment les LazyInstantiationException lors du déclenchement du lazy-load avec une session fermée).
    Mais je ne crois pas me tromper en disant que c'est bien Spring qui va fermer la session Hibernate (pour l'ouverture c'est moins problématique car, en effet, on peut utiliser le 1er appel au getCurrentSession()).

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Points : 83
    Points
    83
    Par défaut
    ah ok...

    m'enfin, moi j'aime pas l'utilisation du lazyloading dans la couche de présentation (permis grace au pattern opensession in view....) c'est tellement dangereux pour les perfs...)
    j'aime pas l'usage inconsidéré du lazy loading...


    Citation Envoyé par mOuLi Voir le message
    Ben justement Spring propose (entre autres) une implémentation du pattern open-session-in-view via la classe org.springframework.orm.hibernate.support.OpenSessionInViewFilter qui va permettre de fermer la session Hibernate "au plus tard" de façon à ne pas avoir d'erreurs (notamment les LazyInstantiationException lors du déclenchement du lazy-load avec une session fermée).
    Mais je ne crois pas me tromper en disant que c'est bien Spring qui va fermer la session Hibernate (pour l'ouverture c'est moins problématique car, en effet, on peut utiliser le 1er appel au getCurrentSession()).

Discussions similaires

  1. [PHP 5.3] Sessions - bonnes pratiques pour un débutant
    Par totale_eclipse dans le forum Langage
    Réponses: 11
    Dernier message: 12/07/2011, 00h27
  2. Hibernate et Servlet bonnes pratiques
    Par natoine dans le forum Hibernate
    Réponses: 14
    Dernier message: 17/05/2011, 12h55
  3. Réponses: 13
    Dernier message: 13/03/2009, 09h38
  4. Bonnes pratiques SessionFactory / Session
    Par balmeyer dans le forum Persistance des données
    Réponses: 4
    Dernier message: 04/02/2009, 17h51
  5. [Bonne pratique] - Scope session
    Par JWillow dans le forum JSF
    Réponses: 11
    Dernier message: 13/02/2007, 21h17

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