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

Persistance des données Java Discussion :

Bonnes pratiques SessionFactory / Session


Sujet :

Persistance des données Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier Avatar de balmeyer
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Points : 79
    Points
    79
    Par défaut Bonnes pratiques SessionFactory / Session
    J'ai lu pas mal de docs sur la persistance dans une application web (Tomcat), mais je n'ai pas encore trouvé de réponse à une question toute bête que je me pose :

    Comment bien "placer" les objets SessionFactory / Session pour Hibernate et EntityManagerFactory / EntityManager pour JPA ? c'est à dire quelle portée, statique ou pas, etc. ? Une instance par application ou une instance par session ?

    J'essaye plusieurs méthodes qui marchent, mais laquelle est la meilleure dans un environnement de production, pour les perfs ?

    Exemples :
    - EntityManagerFactory en "static", avec une seule instance pour toute l'application web ? Ou une instance par session ?
    - Idem pour les Session / EntityManager : une session ouverte par session utilisateur, ou une session pour tous les utilisateurs, ou (comme je l'ai lu ici) une session par requête ?

    Merci par avance !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Points : 108
    Points
    108
    Par défaut
    1. Pour SessionFactory et EntityManagerFactory => singleton dans l'application (surtout pas la session http, car ces objets sont coûteux à instancier et en plus tu ne pourras pas bénéficier du cache de second niveau). Tu peux donc les placer en static ou alors en faire des beans spring de type singleton.

    2. En ce qui concerne la Session et EntityManager, il s'agit d'objet transactionnels, ie la portée de ces objets est la transaction. Donc au mieux, il faut un objet session par requête (il faut éviter la session par utilisateur qui correspond à une transaction longue, et surtout ne pas utiliser la portée application). En fait, la plupart du temps, la portée de la session est inférieure à la requête, puisque sa durée de vie correspond au temps d'exécution de la couche de service métier.

  3. #3
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Salut,

    +100 pour ce qui a été avancé par ohanny

    J'ajouterais qu'en général, l'EntityManager/Session est stocké dans un ThreadLocal, ce qui correspond généralement à une requête.

  4. #4
    Membre régulier Avatar de balmeyer
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Points : 79
    Points
    79
    Par défaut
    Merci beaucoup pour ces réponses !

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 383
    Points : 468
    Points
    468
    Par défaut
    A noter qu'avec Hibernate, c'est lui qui gère tout, il suffit d'appeler la méthode getCurrentSession() pour récupérer la session courante

Discussions similaires

  1. Bonnes pratiques de protections individuelles
    Par Community Management dans le forum Sécurité
    Réponses: 23
    Dernier message: 11/06/2024, 11h23
  2. Session php et BD bonne pratique
    Par Tendhor57 dans le forum Langage
    Réponses: 5
    Dernier message: 11/04/2013, 16h53
  3. [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
  4. [session hibernate]bonnes pratiques
    Par centoo dans le forum Hibernate
    Réponses: 6
    Dernier message: 06/05/2008, 16h25
  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