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 :

Chargement driver et configuration une seule fois ou a chaque operation sur la base?


Sujet :

Hibernate Java

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 176
    Points : 198
    Points
    198
    Par défaut Chargement driver et configuration une seule fois ou a chaque operation sur la base?
    Bonjour, voilà j'utilise un DAO

    classe CustomerDao

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
        public class CustomerDao implements DaoInterface<Customer, String>{
     
     
     
            private Session currentSession;
     
            private Transaction currentTransaction;
     
            public CustomerDao() {
            }
     
     
            public Session openCurrentSession() {
                currentSession = getSessionFactory().openSession();
                return currentSession;
            }
     
            public Session openCurrentSessionwithTransaction() {
                currentSession = getSessionFactory().openSession();
                currentTransaction = currentSession.beginTransaction();
                return currentSession;
            }
     
            public void closeCurrentSession() {
                currentSession.close();
            }
     
            public void closeCurrentSessionwithTransaction() {
                currentTransaction.commit();
                currentSession.close();
            }
     
            private static SessionFactory getSessionFactory() {
                Configuration configuration = new Configuration().configure();
                StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
                        .applySettings(configuration.getProperties());
                SessionFactory sessionFactory = configuration.buildSessionFactory(builder.build());
                return sessionFactory;
            }
    puis une classe CustomerService

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class CustomerService {
     
     
        private static CustomerDao customerDao;
     
        public CustomerService() {
            customerDao = new CustomerDao();
        }
     
        public void persist(Customer entity) {
            customerDao.openCurrentSessionwithTransaction();
            customerDao.persist(entity);
            customerDao.closeCurrentSessionwithTransaction();
        }
     
        public void update(Customer entity) {
            customerDao.openCurrentSessionwithTransaction();
            customerDao.update(entity);
            customerDao.closeCurrentSessionwithTransaction();
        }
    et a chaque fois que je fais une operation d'ecriture, mise a jour ...

    je fais un appel a une methode ex: public void update(Customer entity)
    qui elle meme appelle une autre : customerDao.openCurrentSessionwithTransaction();

    cette derniere appelle private static SessionFactory getSessionFactory()

    L'idée ( surement pas la meilleur) est qu'a chaque operation sur la base de données, je recree une sessionFactory qui charge donc mon fichier cfg.xml , le driver...

    Ne devrais je pas faire cela une seule fois par exemple au demarrage de l'application? genre dans le constructeur d'une servlet ou autre...?
    merci @ tous
    Après la difficulté, la facilité...

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 176
    Points : 198
    Points
    198
    Par défaut
    En lisant la doc d'hibernate, j'ai vu qu'il devrait y avoir une seule SessionFactory par application, voilà comment j'ai crée la mienne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    package com.abysr.moneytime.listener;
     
     
     
     
        import javax.servlet.ServletContextEvent;
        import javax.servlet.ServletContextListener;
     
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
     
        public class MyAppServletContextListener implements ServletContextListener{
           public  static SessionFactory sessionFactory;
            public void contextDestroyed(ServletContextEvent arg0) {
                sessionFactory.close();
                System.out.println("Session factory destroyed");
            }
     
            public void contextInitialized(ServletContextEvent arg0) {            
               Configuration configuration = new Configuration().configure();
                sessionFactory = configuration.buildSessionFactory();
                System.out.println("Session factory created");   
            }        
        }
    et lorsque j'ai besoin d'une session, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Session session = MyAppServletContextListener.sessionFactory.openSession();
    est ce que je fais bien de faire ainsi?
    Après la difficulté, la facilité...

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

Discussions similaires

  1. Charger les données une seule fois ou dans chaque session.
    Par archer dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 28/10/2010, 12h18
  2. Action à exécuter une seule fois au chargement
    Par toufou dans le forum jQuery
    Réponses: 1
    Dernier message: 03/05/2010, 16h36
  3. [Configuration] filtrer le flux sortant une seule fois, en debut de code...
    Par misstinkiete dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 13/10/2005, 21h20
  4. Réponses: 18
    Dernier message: 10/02/2005, 13h22
  5. Réponses: 2
    Dernier message: 30/11/2004, 11h48

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