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 :

Perte de connectivité à une bdd MySQL


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 161
    Par défaut Perte de connectivité à une bdd MySQL
    hello,

    j'utilise hibernate depuis une appli web java qui tourne sur tomcat 5.5. Tout ce qu'il y a de plus classique. Mon jdk est celui de sun, version 6. Ma base est une base MySQL version 5 (je ne sais plus le numéro de version mineure exact) tournant sur debian etch. Tomcat et MySQL tournent sur la même machine. Le problème est qu'au bout d'un peu plus de 24h, je perds ma connexion à la base de données. Ce n'est pas à priori un problème dû à hibernate, mais au connecteur java jdbc de mysql. Mais comme j'utilise ce connecteur avec hibernate, je mets mon message ici.
    Si les modérateurs pensent que mon message serait mieux ailleurs et qu'il aurait plus de chances d'obtenir le tag [Résolu], je leur laisse le soin de le déplacer.

    Mon cas d'utlisation me parait vraiment simple : Tomcat + MySQL + Hibernate, je ne peux imaginer que personne ne soit tombé sur ce problème...

    Merci d'avance.

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

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    http://www.hibernate.org/117.html#A15

    Sinon, une petite recherche sur le forum te donnera les posts qui évoquent ce problème.

  3. #3
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 161
    Par défaut
    merci pour la réponse, en effet, j'avais trouvé des choses évoquant c3p0 sur google, mais les threads que j'ai lu (probablement trop rapidement) ne semblaient pas donner de résultats satisfaisants.

    Je vais regarder DBCP. En fait l'idéal serait probablement que je mette en place le connection pool jdbc sous tomcat et que je l'utilise dans mon appli avec hibernate.

    En fait dans l'imédiat, pour palier à l'urgence, je suis parti sur postgresql pour remplacer mysql. Pour l'instant je n'ai pas eu de problème, mais vu que le "built-in connection pooling" n'est pas sensé être utilisé en environnement de production, je pense que ce n'est pas très propre comme solution. Je vais revenir sur mysql et mettre en place le connection pool sous tomcat, ce sera plus fiable (bien que je ne sois pas en environnement de production...).

    Merci encore.

  4. #4
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 161
    Par défaut
    bon, je suis revenu à mysql et j'ai mis en place le connection pool sous tomcat (DBCP, pas C3P0). Mais j'ai toujours le même problème de connexion qui tombe au bout d'un certain temps entre l'application web et la base de données. J'utilise hibernate au-dessus de la base de données.

    Au niveau de tomcat, j'ai rajouté le connecteur mysql java dans common/lib. Puis j'ai rajouté un fichier META-INF/context.xml dans mon application web, dont voici le contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0"?>
     
    <Context path="/d2cs" debug="5" reloadable="true"
             crossContext="true">
     
      <!-- JDBC connection parameters -->
      <Resource name="jdbc/d2cs" auth="Container" type="javax.sql.DataSource"
                maxActive="100" maxIdle="30" maxWait="10000"
                username="d2cs" password="d2cs"
                driverClassName="com.mysql.jdbc.Driver"
                url="jdbc:mysql://localhost/d2cs?autoReconnect=true"/>
    </Context>
    Si je comprends bien, cela permet de diffuser un pool de connexions JDBC sous forme de resource JNDI depuis tomcat vers les applications web.

    Voici ensuite mon fichier de configuration 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
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
    <hibernate-configuration>
      <session-factory>
     
        <property name="hibernate.connection.datasource">java:/comp/env/jdbc/d2cs</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="show_sql">true</property>
     
     
        <!-- Drop and re-create the database schema on startup -->
        <!-- <property name="hbm2ddl.auto">create</property> -->
        <mapping resource="test/A.hbm.xml"/>
        <mapping resource="test/B.hbm.xml"/>
     
    </hibernate-configuration>
    On peut difficilement faire plus simple... En cherchant sur le web, j'ai vu que certains utilisaient des propriétés (*.ps.* pour les "prepared statments") pour customiser les connexions jdbc dans le fichier de config d'hibernate. Mais je ne comprends pas trop, dans ce cas, la configuration des connexions jdbc est dispersée entre le fichier de conf context.xml de tomcat qui définit les resources jndi et le fichier de conf hibernate. Est-ce qu'hibernate peut "surcharger" la configuration des connexions jdbc fournies par tomcat ?

    bref, galère.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Par défaut
    bonjour.Je ne sais pas si ca peut aider ou pas, mais j'ai le même problème, et faut que j'attende demain pour savoir si c'est résolu du coup :-p
    Donc en fait au départ,
    la connection à la BD était faite dans hibernate.cfg comme ceci:

    Portion de hibernate.cfg pour connection à la BD
    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
    <property name="hibernate.connection.url">
    			jdbc:mysql://ptilouis/cilaos_dev
    		</property>
    		<property name="hibernate.connection.driver_class">
    			com.mysql.jdbc.Driver
    		</property>
    		<property name="hibernate.connection.username">cilaos_admin</property>
    		<property name="hibernate.connection.password">cilaos</property>
    			-->
     
    		<!-- property name="hibernate.connection.pool_size"></property -->
    		<!-- dialect for MySQL -->
     
    		<property name="dialect">
    			org.hibernate.dialect.MySQLDialect
    		</property>
    		<property name="hibernate.transaction.factory_class">
    			org.hibernate.transaction.JDBCTransactionFactory
    		</property>

    Du coup, ayant les problèmes de déconnection, j'ai donc configurer Tomcat pour le JNDI et Hibernate, ce qui m'a amené à créer un JNDI global, çad en configurant directement tomcat par l'intermédiare du fichier XML:
    Portion du fichier server.xml de Tomcat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     <Resource name="jdbc/cilaos_dev"
    	auth="Container"
    	type="javax.sql.DataSource"
    	username="cilaos_admin"
    	password="cilaos"
    	driverClassName="com.mysql.jdbc.Driver"
    	url="jdbc:mysql://ptilouis/cilaos_dev?autoReconnect=true"
    	validationQuery="select 1;"
    	maxActive="8"
    	maxIdle="4"/>
     
      </GlobalNamingResources>
    Ensuite j'ai configuré mon application pour qu'il puisse utiliser ce JNDI , donc par l'intermédiaire du contexte de l'application (context.xml pour l'application) ou pour un context général (context.xml pour toutes les applications déployées):
    Fichier context de l'application sur le serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <Context path="/test_interface" reloadable="true" docBase="/home/jchaw/workspace/test_interface" workDir="/home/jchaw/workspace/test_interface/work">
    <ResourceLink global='jdbc/cilaos_dev' name='jdbc/cilaos_dev' type="javax.sql.Datasource"/>
    </Context>
    Et enfin j'ai configuré hibernate (hibernate.cfg) :
    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
     
     <!-- Use a Tomcat JNDI datasource -->
            <property name="connection.datasource">java:comp/env/jdbc/cilaos_dev</property>
     
    		<!--optimise le dialect SQL pour Mysql-->
    		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
     
    		<property name="hibernate.transaction.factory_class">
    			org.hibernate.transaction.JDBCTransactionFactory
    		</property>
     
    		<property name="c3p0.min_size">5</property>
    		<property name="c3p0.max_size">100</property> 
    		<property name="c3p0.max_size">100</property> 
    		<property name="c3p0.timeout">1800</property>
    		<property name="c3p0.max_statement">50</property>
    Bien sûr, j'ai enlevé toutes les propriétés qui me permettaient à Hibernate de se connecter directement à la BD grâce à son fichier de configuration (cf hibernate.cfg tout en haut de ce post).

    Donc voilà, je sais pas si ça a marché, je sais juste que j'ai bien configuré le JNDI, maintenant faut que j'attende demain pour voir si la connection a été maintenue.
    Quelqu'un aurait un avis sur ce que j'ai fait?
    Bonne journée à tous

  6. #6
    Membre éprouvé
    Inscrit en
    Janvier 2006
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 161
    Par défaut
    hello,

    en fait, entre temps, j'ai réussi à résoudre ce problème. Si ma mémoire est bonne, c'était un problème dans le fichier de configuration hibernate.cfg.xml. Je me souviens plus exactement des paramètres à ajouter ou à supprimer, mais je te dis ça demain.

    bonne soirée

Discussions similaires

  1. Dialoguer avec une BDD MySQL en language C
    Par veridik dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2005, 11h58
  2. [debutant] connection à une BDD MySQL
    Par Golork dans le forum Bases de données
    Réponses: 1
    Dernier message: 11/03/2005, 16h51
  3. Réponses: 2
    Dernier message: 06/01/2005, 21h09
  4. Changements de colonnes dans une BDD MySQL
    Par arnaud_verlaine dans le forum Requêtes
    Réponses: 8
    Dernier message: 07/08/2003, 11h33
  5. connection a une BDD MySql
    Par delire8 dans le forum MFC
    Réponses: 7
    Dernier message: 19/06/2002, 18h18

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