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 :

[hibernate][C3PO] connexion mySQL qui tombe ....


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut [hibernate][C3PO] connexion mySQL qui tombe ....
    Bonjour à tous,

    J'ai un gros probleme avec ma connexion à MySql sur ma webapp ...

    Au bout d'un certain temps, ca se coupe, mes requetes n'aboutissent plus ... Je suis pourtant passé à C3PO ....

    VOici mon hibernate.cg, au cas ou :

    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
      <?xml version="1.0" encoding="utf-8" ?> 
      <!DOCTYPE hibernate-configuration (View Source for full doctype...)> 
    - <hibernate-configuration>
    - <session-factory>
    - <!--  local connection properties 
      --> 
      <property name="hibernate.connection.url">jdbc:mysql://localhost/datadegrees</property> 
      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
      <property name="hibernate.connection.username">datadegrees</property> 
      <property name="hibernate.connection.password">datadegrees</property> 
    - <!--  property name="hibernate.connection.pool_size"></property 
      --> 
    - <!--  dialect for MySQL 
      --> 
      <property name="hibernate.c3p0.min_size">5</property> 
      <property name="hibernate.c3p0.max_size">20</property> 
      <property name="hibernate.c3p0.timeout">1800</property> 
      <property name="hibernate.c3p0.max_statement">50</property> 
      <property name="hibernate.dialect">5</property> 
      <property name="hibernate.c3p0.min_size">5</property> 
      <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property> 
      <property name="hibernate.show_sql">false</property> 
      <property name="hibernate.use_outer_join">true</property> 
      <property name="hibernate.transaction.factory_class">net.sf.hibernate.transaction.JDBCTransactionFactory</property> 
     
    .../...
    Merci pour votre aide !! Je suis perdu ....

  2. #2
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    fermes ta session hibernate (session.close()) apres chaque requete

  3. #3
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Ben ouais, je l'ai fait ... Mais j'ai toujours le meme probleme ...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    Bonjour,

    tu n'es pas assez précis dans la description de ton problème.

    Au bout d'un certain temps, ca se coupe,
    au bout de combien de temps : 2 jours d'exploitation, 1 heure ?

    mes requetes n'aboutissent plus
    les requetes sont longues, un message d'erreur est envoyé ?
    si oui lequel ?

  5. #5
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    ouais désolé ...

    Donc je en connais pas trop la durée au bout de laquelle ca se coupe. Mais la, par exemple, j'ai rebooté tomcat hier à 9h. Ce matin à 9h, ca ne fonctionnait plus ... Sans qu'il y ait aucune utilisation de l'appli ou preque, en plus ... En gros, j'ai du charger 2-3 fois les pages, pendant cette periode ...

    Sinon, concernant le message d'erreur. Il est variable, mais globalement, par exemple, lorsque j'instancie une liste de resultats avec find, à la ligne suivante, je fais un liste.size, et je me retrouve avec un nullPointer ...

    Rien de vraiment explicite comme message d'erreur ... Rien qui me dise que la connexion est tombé, ou ce genre de chose ...

  6. #6
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Mais ... y a t il moyen de tracer un peu la connexion C3PO ? Connaitre le nombre de sessions en cours ? ce genre de trucs ?

    Ca m'aiderait un peu à comprendre ....

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    Bonjour,

    j'ai l'impression que ton appli n'utilise pas le pool de connexion C3P0.

    En principe si tu mets le niveau de trace à INFO tu dois voir lors de la premiere connexion un truc du style

    Initializing c3p0 pool ...

    Dans le cas contraire, je sais que l'on trouve les deux notations, mais essaie de remplacer les lignes suivantes dans ton fichier de configuration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      <property name="hibernate.c3p0.min_size">5</property>
      <property name="hibernate.c3p0.max_size">20</property>
      <property name="hibernate.c3p0.timeout">1800</property>
      <property name="hibernate.c3p0.max_statement">50</property>
      <property name="hibernate.dialect">5</property>
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      <property name="c3p0.min_size">5</property>
      <property name="c3p0.max_size">20</property>
      <property name="c3p0.timeout">1800</property>
      <property name="c3p0.max_statement">50</property>

  8. #8
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    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
    INFO: Use outer join fetching: true
    22 sept. 2005 18:26:27 net.sf.hibernate.connection.C3P0ConnectionProvider configure
    INFO: C3P0 using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost/mabase?autoReconnect=true
    22 sept. 2005 18:26:27 net.sf.hibernate.connection.C3P0ConnectionProvider configure
    INFO: Connection properties: {user=login, password=mdp}
    22 sept. 2005 18:26:27 net.sf.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
    INFO: Transaction strategy: net.sf.hibernate.transaction.JDBCTransactionFactory
    22 sept. 2005 18:26:27 net.sf.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
    INFO: No TransactionManagerLookup configured (in JTA environment, use of process level read-write cache is not recommended)
    Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@1ad6c98 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@fc40ae [ acquireIncrement -> 1, autoCommitOnClose -> false, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, idleConnectionTestPeriod -> 0, initialPoolSize -> 5, maxIdleTime -> 1800, maxPoolSize -> 20, maxStatements -> 0, minPoolSize -> 5, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@b49b19 [ description -> null, driverClass -> null, factoryClassLocation -> null, jdbcUrl -> jdbc:mysql://localhost/datadegrees?autoReconnect=true, properties -> {user=datadegrees, password=datadegrees} ] , propertyCycle -> 300, testConnectionOnCheckout -> false ] , factoryClassLocation -> null, numHelperThreads -> 3 ] 
    22 sept. 2005 18:26:29 net.sf.hibernate.cfg.SettingsFactory buildSettings
    INFO: Use scrollable result sets: true
    22 sept. 2005 18:26:29 net.sf.hibernate.cfg.SettingsFactory buildSettings
    INFO: Use JDBC3 getGeneratedKeys(): true
    22 sept. 2005 18:26:29 net.sf.hibernate.cfg.SettingsFactory buildSettings
    INFO: Optimize cache for minimal puts: false
    22 sept. 2005 18:26:29 net.sf.hibernate.cfg.SettingsFactory buildSettings
    INFO: Query language substitutions: {}
    22 sept. 2005 18:26:29 net.sf.hibernate.cfg.SettingsFactory buildSettings
    INFO: cache provider: net.sf.hibernate.cache.EhCacheProvider
    22 sept. 2005 18:26:29 net.sf.hibernate.cfg.Configuration configureCaches
    INFO: instantiating and configuring caches
    22 sept. 2005 18:26:30 net.sf.hibernate.impl.SessionFactoryImpl <init>
    INFO: building session factory
    22 sept. 2005 18:26:32 net.sf.hibernate.impl.SessionFactoryObjectFactory addInstance
    INFO: Not binding factory to JNDI, no JNDI name configured
    Voila ce que j'ai à l'initialisation d'une session Hibernate. Je suppose donc que mon niveau de TRACE est à INFO ?
    En tout cas, il cause de C3PO dans le poste ... Donc logiquement, c'est bien que j'utilise C3PO, non ?


    Mais c'est vraiment bizarre .... Maintenant, j'ai acès aleatoirement à mes pages .. Une fois sur 3, au bout d'un certain temps, j'ai un message du genre ("couldn't execute query")....
    Des queje redémarre Tomcat, j'ai plus le probleme .

    Merci en totu cas de t'occuper de mon probleme ... Je comprend pas ce qui arrive ...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    bonjour,

    j'aurais du y penser plus tôt mais ton problème vient tout simplement de MySQL qui ferme les connections inactives au bout d'un certain temps (8 heures par défaut).

    Par contre la propriété autoReconnect=true que tu ajoute à l'url devrait forcer le pool à ce reconnecter automatiquement (probléme de driver, de version de mySQL ?).

    Tu peux augmenter ce temps bien sur mais une solution plus élégante serait d'utiliser la propriétés de C3P0 qui teste la connection toutes les x secondes (avec x inférieure à 8 heures évidement).

    lien sur le topic qui parle de ce problème :
    http://cephas.net/MT/mt-comments.cgi?entry_id=761

  10. #10
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Merci pour le lien !!

    J'ai lu très rapidement. Mais je dois présenter la webapp chez le client et je pars cet apres midi pour ca ...

    Je regarde ca de plus pret la semaine prochaine et ej te tiens au courant !

  11. #11
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Je reviens de la présentation aupres du client ... J'ia malheureusement eu des problemes avec la connexion à la base, comme je le craignais ...

    Cependant, la situation est un peu différente. En fait, les problemes semblent bien apparaitre au bout de quelques temps (qq heures), car au reboot de Tomcat, je n'ai plus le probleme.


    Cependant, lorsque le probleme survient, j'ai une page d'exception, mais quand je retente, ca finit par fonctionner, la plupart du temps ....
    Du coup, je me demande si le probleme vient bien du fait que MySQL coupe les connections inactives au bout d'un certain temps ...

    Ca se passe comme si il n'arrivait pas à accrocher la connexion ...


    Pour finir, je remarque que certaines personnes qui ont les memes problemes que moi ont des infos dans les logs beaucoup plus rices que moi, et notammeent des infos dans une partie appelé ** BEGIN NESTED EXCEPTION **

    Est ce que pour avoir ces infos, on doit activer une trace qq part ???

    Merci d'avance !

  12. #12
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Bon .... J'ai testé les modifications à faire expliqués sur le lien fourni par Pietra ...

    J'ai testé du coup à la maniere expliqué sur le lien, à savoir dans mysqlAdministrator, coupé les threads en cours utilisés par Hibernate dans MySQL, et en relancant une requete Hibernate, j'ai les memes problemes, mais plus exactement :
    java.net.SocketException: Software caused connection abort: socket write error
    Je réaffiche mon fichier de conf Hibernate :

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-configuration
        PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
     
    <hibernate-configuration>
    	<session-factory>
    		<!-- local connection properties -->
    		<property name="hibernate.connection.url">
    			jdbc:mysql://localhost/maBase?autoReconnect=true
    		</property>
    		<property name="hibernate.connection.driver_class">
    			com.mysql.jdbc.Driver
    		</property>
    		<property name="hibernate.connection.username">login</property>
    		<property name="hibernate.connection.password">mdp</property>
    		<!-- property name="hibernate.connection.pool_size"></property -->
    		<!-- dialect for MySQL -->
     
    		<property name="hibernate.connection.autoReconnect">true</property>
    		<property name="hibernate.connection.autoReconnectForPools">true</property>
    		<property name="hibernate.connection.is-connection-validation-required">true</property>
     
    		<property name="hibernate.c3p0.min_size">10</property>
    		<property name="hibernate.c3p0.max_size">100</property>
    		<property name="hibernate.c3p0.timeout">18000</property>
    		<property name="c3p0.acquireRetryAttempts">30</property>
     
    		<property name="c3p0.acquireIncrement">5</property>
    		<property name="c3p0.automaticTestTable">C3P0TestTable</property>
     
    		<property name="c3p0.idleConnectionTestPeriod">36000</property>
     
    		<property name="c3p0.initialPoolSize">20</property>
    		<property name="c3p0.maxPoolSize">100</property>
    		<property name="c3p0.maxIdleTime">1200</property>
    		<property name="c3p0.maxStatements">50</property>
    		<property name="c3p0.minPoolSize">10</property>
     
    		<property name="dialect">
    			net.sf.hibernate.dialect.MySQLDialect
    		</property>
    		<property name="hibernate.show_sql">false</property>
    		<property name="hibernate.use_outer_join">true</property>
    		<property name="hibernate.transaction.factory_class">
    			net.sf.hibernate.transaction.JDBCTransactionFactory
    		</property>
     
    		<mapping resource="table1.hbm" />
    		<mapping resource="table2.hbm" />
     
    	</session-factory>
    </hibernate-configuration>
    Si quelqu'un a une idée, je suis réellement preneur .... Parce que la, je suis completement largué .... Et je commence serieusement à me dire que je suis dans la merde ....

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    bonjour,

    ce qui est étrange c'est que l'option autoReconnect ne semble pas fonctionner sur ta configuration.
    Cette option est pourtant bien supportée par le driver jdbc MySql.

    Essaie de vérifier la compatibilité entre ta version de base et de driver.

    Sinon il faudra tester chaque connexion avant de l'utiliser (session.connect()) ce qui sera très couteux.

  14. #14
    Membre régulier
    Inscrit en
    Mars 2005
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 162
    Points : 71
    Points
    71
    Par défaut
    Ma base c MySQL 4.0.24_Debian-10-log
    mon river : mysql-connector-java-3.1.10

    A priori, en faisant des recherches sur le net, j'ia pas vu de problemes de compatibilités ...

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 274
    Points : 307
    Points
    307
    Par défaut
    Utilise tu la version de C3P0 fournie avec Hibernate ?

    si oui essaie avec la dernière version de l'API.

Discussions similaires

  1. [Hudson] Connexion ssh qui tombe en timeout
    Par pierreJacquot dans le forum Intégration Continue
    Réponses: 1
    Dernier message: 06/06/2012, 13h40
  2. [Wamp] Connexion MySQL qui saute
    Par Dark Cid dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 21/01/2009, 20h13
  3. Réponses: 4
    Dernier message: 20/09/2007, 01h50
  4. [Hibernate] utilisation de JNDI pour connexion MySql
    Par michaelbob dans le forum Hibernate
    Réponses: 1
    Dernier message: 14/03/2006, 16h08
  5. [VB6]Connexion a une BD mysql qui n'est pas en local
    Par aude_1603 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 02/03/2006, 09h05

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