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

Frameworks Web Java Discussion :

Configuration MySql avec Hibernate et Spring


Sujet :

Frameworks Web Java

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 48
    Par défaut
    Re

    Finalement pour tester, je change de SGBD pour PostgreSQL.
    le reste de ma config n'a pas changé (sans utiliser c3p0).

    hibernate.cfg.xml
    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
    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     
    <hibernate-configuration>
        <session-factory>
     
            <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
            <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/postgres</property>
            <property name="hibernate.connection.username">postgres</property>
            <property name="hibernate.connection.password">capomega</property>
            <property name="hibernate.connection.pool_size">10</property>
            <property name="show_sql">true</property>
            <property name="dialect">org.hibernate.dialect.ProgressDialect</property>
            <property name="hibernate.hbm2ddl.auto">update</property>
            <property name="hibernate.connection.autocommit">true</property>
     
            <property name="hibernate.cache.use_query_cache">false</property>
            <property name="hibernate.cache.use_second_level_cache">false</property>
     
            <!-- Mapping files -->
            <mapping resource="fr/vivreaction/hibernate/Action.hbm.xml" />
    ...
     
        </session-factory>
    </hibernate-configuration>
    applicationContext.xml
    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
    40
    41
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
     
    <beans>
     
        <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" destroy-method="close">
            <property name="configLocation">
                <value>classpath:hibernate.cfg.xml</value>
            </property>
        </bean>
        <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
        <bean id="transactionProxy" abstract="true"
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager" ref="transactionManager"/>
            <property name="transactionAttributes">
                <props>
                    <prop key="insert*">PROPAGATION_REQUIRED</prop>
                    <prop key="update*">PROPAGATION_REQUIRED</prop>
                    <prop key="save*">PROPAGATION_REQUIRED</prop>
                    <prop key="*">PROPAGATION_REQUIRED, readOnly</prop>
                </props>
            </property>
        </bean>
     
        <bean id="actionService" parent="transactionProxy">
            <property name="target">
                <bean class="fr.vivreaction.business.ActionService">
                    <property name="actionDao" ref="actionDao"/>
                </bean>
            </property>
        </bean>
    ...
     
     
        <bean id="actionDao" class="fr.vivreaction.hibernate.dao.ActionDao">
             <property name="sessionFactory" ref="sessionFactory" />
        </bean>
    ...
    </beans>
    Je bloque sur un nouveau problème : je peux mettre a jour mes données, mais mes INSERT ne marchent pas.

    j'utilise session.merge() pour ces différentes opérations. Mon test avec session.save() ne marche pas mieux.

    J'ai déclaré mes tables en paramétrant les id avec le mot clé SERIAL qui remplace AUTO_INCREMENT pour PostgreSQL.

    Merci d'avance de vos réponses

  2. #22
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    Déjà tu utilises le mauvais dialect : ProgressDialect pour bases Progress

    Ensuite, évite le mode autocommit, c'est très moche.

  3. #23
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 48
    Par défaut
    Au temps pour moi, je corrige le Dialect, mais ca ne corrige pas mon probleme.
    L'autocommit était un test, je l'enleve.

    pas d'autre idée ?

  4. #24
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    Tu as mis le bon id generator dans ton mapping ?

  5. #25
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 48
    Par défaut
    Effectivement, j'ai lu un peu vite.

    je change mes fichiers de mapping pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            <id name="id" column="id">
                <generator class="sequence"/>
            </id>
    et ca marche ...

    il ne me reste plus qu'a remplir les données utiles de ma base pour relancer mes tests et voir si mon pool se comporte mieux.

    je repasserai par ici pour tenir au courant et éventuellement cliquer avec satisfaction sur le piti bouton Resolu ..

  6. #26
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 48
    Par défaut
    f***


    org.postgresql.util.PSQLException: FATAL: désolé, trop de clients sont déjà connectés

    j'ai un vrai probleme de config quelquepart.

  7. #27
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    Essaie de configurer log4j ou autre pour afficher les logs et voir quand les transactions démarrent, quand la session est fermée etc...

  8. #28
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 48
    Par défaut
    Re !

    Voila un extrait de mes logs concernant les transactions et session :
    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
     
    2010-10-07 11:21:58 DEBUG [Configuration] hibernate.transaction.auto_close_session=true
    (...)
    2010-10-07 11:21:59 INFO  [Configuration] Configured SessionFactory: null
    (...)
    2010-10-07 11:22:00 INFO  [SettingsFactory] Automatic session close at end of transaction: enabled
    (...)
    2010-10-07 11:22:00 INFO  [SessionFactoryImpl] building session factory
    (...)
    2010-10-07 11:22:02 DEBUG [SessionFactoryImpl] instantiated session factory
    (...)
    2010-10-07 11:22:05 DEBUG [SessionImpl] opened session at timestamp: 12864433248
    (...)
    2010-10-07 11:22:05 DEBUG [JDBCTransaction] committed JDBC Connection
    2010-10-07 11:22:05 DEBUG [ConnectionManager] transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
    2010-10-07 11:22:05 DEBUG [ConnectionManager] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
    2010-10-07 11:22:05 DEBUG [ConnectionManager] transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
    2010-10-07 11:22:05 DEBUG [SessionImpl] opened session at timestamp: 12864433256
    (...)
     
    2010-10-07 11:22:11 DEBUG [SessionImpl] opened session at timestamp: 12864433318
    2010-10-07 11:22:11 DEBUG [JDBCTransaction] begin
    2010-10-07 11:22:11 DEBUG [ConnectionManager] opening JDBC connection
    2010-10-07 11:22:11 DEBUG [JDBCTransaction] current autocommit status: false
    (...)
    2010-10-07 11:22:11 DEBUG [SQL] select partenaire0_.logo as col_0_0_ from partenaire partenaire0_ where partenaire0_.id=?
    2010-10-07 11:22:11 DEBUG [AbstractBatcher] about to open ResultSet (open ResultSets: 0, globally: 0)
    2010-10-07 11:22:11 DEBUG [Loader] result row: 
    2010-10-07 11:22:11 DEBUG [AbstractBatcher] about to close ResultSet (open ResultSets: 1, globally: 1)
    2010-10-07 11:22:11 DEBUG [AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    2010-10-07 11:22:11 DEBUG [StatefulPersistenceContext] initializing non-lazy collections
    2010-10-07 11:22:11 DEBUG [JDBCTransaction] commit
    2010-10-07 11:22:11 DEBUG [JDBCTransaction] committed JDBC Connection
    2010-10-07 11:22:11 DEBUG [ConnectionManager] transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
    2010-10-07 11:22:11 DEBUG [ConnectionManager] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
    2010-10-07 11:22:11 DEBUG [ConnectionManager] transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
    (--fin du log--)
    Donc hibernate release la transaction mais la session n'est pas fermée ... elle devrait l'etre selon la config ...
    Qu'en penses-tu?

  9. #29
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    A priori oui.
    Tu utilises bien le getCurrentSession dans ton DAO ?

  10. #30
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 48
    Par défaut
    j'utilise getSession() uniquement

    je modifie mes dao pour remplacer par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getSessionFactory().getCurrentSession()
    j'ai toujours le meme comportement,"Too many connections."

    Après la doc que j'ai lue et les différents exemple d'utilisation, je me dit que ma config est bonne, et que ca vient peut etre d'ailleurs...
    est ce qu'il ne faut pas déclarer/instancier le transactionManager dans les service ou le dao ?

    ce n'est précisé nulle part.

    mon service actuel
    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 fr.vivreaction.business;
     
    import ...
     
    public class ActionService implements IActionService {
     
        private static final Log log = LogFactory.getLog(ActionService.class);
     
        private IActionDao actionDao;
     
        /*
         * Setters pour Spring
         */
        public void setActionDao(IActionDao actionDao) {
            this.actionDao = actionDao;
        }
     
        /*
         * Méthodes
         */
        public List<Action> getListeActions(boolean active){
            return actionDao.getListeActions(active);
        }
    }
    mon dao
    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
    package fr.vivreaction.hibernate.dao;
     
    import ...
     
    public class ActionDao extends AbstractDao implements IActionDao {
     
        private static final Log log = LogFactory.getLog(ActionDao.class);
     
    	@SuppressWarnings("unchecked")
    	public List<Action> getListeActions() {
     
    		log.debug("getListeActions");
    		Session session = getSessionFactory().getCurrentSession();
    		try {
     
    			Query query = session.createQuery("from Action");
     
    			List<Action> result = new ArrayList<Action>();
     
    			result.addAll(query.list());
     
    			return result;
     
    		} catch (RuntimeException re) {
    			log.error("get failed", re);
    			throw re;
    		}
    	}
    }
    et mon abstractDao
    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
     
    package fr.vivreaction.hibernate.dao;
     
    import ...
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
     
     
    public abstract class AbstractDao extends HibernateDaoSupport {
     
        private static final Log log = LogFactory.getLog(AbstractDao.class);
     
        public byte[] getImage(String objet, String champ, String id) {
            ...
        }
    }
    Merci (encore)

  11. #31
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    Utilise plutôt dans ton DAO, l'objet HibernateTemplate que tu récupères via un getHibernateTemplate() puisque tu hérites de HibernateDaoSupport.

    Ca t'évitera de manipuler les sessions directement.

  12. #32
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 48
    Par défaut
    j'ai changé mes Dao, j'ai essayé pas mal de manières différentes de faire, mais rien n'y fait ..

    j'arrive encore a "Too many connections".

  13. #33
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    Et en utilisant ce paramètre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    hibernate.connection.release_mode = after_transaction

  14. #34
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 277
    Par défaut
    Tu avais finalement utilisé le paramètre hibernate.current_session_context_class ?

  15. #35
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 48
    Par défaut
    Bonjour

    Bon, ca venait de mon initialisation de Spring. J'ai remplacé mon getContext :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        protected ApplicationContext getContext() {
            return WebApplicationContextUtils.getRequiredWebApplicationContext(ServletActionContext.getServletContext());
        }
    et l'ai délégué a Spring

    applicationContext.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     <listener>
            <listener-class>
              org.springframework.web.context.ContextLoaderListener
            </listener-class>
        </listener>
    mes sessions se ferment enfin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DEBUG [SessionFactoryUtils] Closing Hibernate Session
    Probleme resolu et meilleures perfs.

    Merci de ton aide

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Probleme de recuperation d'une liste avec Hibernate et Spring
    Par fabiolerusse dans le forum Hibernate
    Réponses: 4
    Dernier message: 22/05/2008, 16h04
  2. GWT <--> Mysql avec Hibernate
    Par tatemilio2 dans le forum GWT et Vaadin
    Réponses: 12
    Dernier message: 23/04/2008, 19h04
  3. [Data] Problème de lazy avec hibernate et Spring
    Par Invité dans le forum Spring
    Réponses: 3
    Dernier message: 20/02/2008, 21h03
  4. Réponses: 2
    Dernier message: 29/01/2007, 16h13
  5. Configurer MYSQL++ avec Dev-C++ pour une connexion à BDMySQL
    Par limouna dans le forum Installation
    Réponses: 1
    Dernier message: 24/07/2005, 22h25

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