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] pool de connexion


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 78
    Points : 73
    Points
    73
    Par défaut [Hibernate] pool de connexion
    Salut,

    j'essaye depuis plusieurs jours à régler mon pool de connexion.
    j'utilise le pool de connexion DBPC et tomcat.

    voici la déclaration de mon context dans server.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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
            <Context path="/axis" docBase="axis" debug="0"
                     reloadable="true" crossContext="true">
              <Logger className="org.apache.catalina.logger.FileLogger"
                         prefix="localhost_axis_log." suffix=".txt"
            	  timestamp="true"/>
     
    		<Resource name="jdbc/axis" scope="Shareable" type="javax.sql.DataSource"/>
     
    		<ResourceParams name="jdbc/axis">
     
    			<parameter>
    				<name>factory</name>
    				<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    			</parameter>
    			<!-- DBCP database connection settings -->
    			<parameter>
    				<name>url</name>
    				<value>jdbc:mysql://localhost:3306/maBase</value>
    			</parameter>
    			<parameter>
    				<name>driverClassName</name>
    				<value>com.mysql.jdbc.Driver</value>
    			</parameter>
    			<parameter>
    				<name>username</name>
    				<value>root</value>
    			</parameter>
    			<parameter>
    				<name>password</name>
    				<value></value>
    			</parameter>
    			<!-- DBCP connection pooling options -->
    			<parameter>
    				<name>maxWait</name>
    				<value>3000</value>
    			</parameter>
    			<parameter>
    				<name>maxIdle</name>
    				<value>200</value>
    			</parameter>
    			<parameter>
    				<name>maxActive</name>
    				<value>20</value>
    			</parameter>
     
    		</ResourceParams>
     
     
      			<Manager className="org.apache.catalina.session.PersistentManager"
                  	debug="0"
                  	saveOnRestart="false"
                  	maxActiveSessions="-1"
                  	minIdleSwap="-1"
                  	maxIdleSwap="-1"
                  	maxIdleBackup="-1">             
                  	<Store className="org.apache.catalina.session.FileStore"/>
       			</Manager>
     
     
    		</Context>

    je ne sais pas trop se que je dois déclarer dans mon fichier hibernate.cfg.xml. POur l'instant j'ai ça :
    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
     
    <hibernate-configuration>
    	<session-factory>
     
    		<property name="hibernate.connection.url">
    			jdbc:mysql://localhost:3306/maBase?autoReconnect=true
     
    		</property>
    		<property name="hibernate.connection.driver_class">
    			com.mysql.jdbc.Driver
    		</property>
    		<property name="hibernate.connection.username">root</property>
    		<property name="hibernate.connection.password" />
    		<!-- dialect for MySQL -->
    		<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="../../Personnes.hbm" />
                     ...
    si vous savez comment me sortir de là car je suis vraiment bloqué par ces histoires de pool et ma connexion jdbc est rompue au bout de quelques heures

    merci pour votre aide.

  2. #2
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Soit tu configures ton framework de pooling dans le fichier de configuration Hibernate, soit tu déclares une DataSource, comme tu sembles le faire, dans ton serveur d'application et tu référence cette DataSource dans le fichier Hibernate comme ceci (extrait doc Hibernate 2.1) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For use inside an application server, Hibernate may obtain connections from a javax.sql.Datasource registered
    in JNDI. Set the following properties:
    Table 3.2. Hibernate Datasource Properties
    Propery name Purpose
    hibernate.connection.datasource datasource JNDI name
    hibernate.jndi.url URL of the JNDI provider (optional)
    hibernate.jndi.class class of the JNDI InitialContextFactory (optional)
    hibernate.connection.username database user (optional)
    hibernate.connection.password database user password (optional)

  3. #3
    Membre confirmé
    Avatar de bmoussaud
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 218
    Points : 555
    Points
    555
    Par défaut
    http://www.hibernate.org/114.html
    tu remplaces ta propriété hibernate.connection.url
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <property name="connection.datasource">java:comp/env/jdbc/axis</property>
    Exemple complet
    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
     
    <hibernate-configuration>
     
    <session-factory>
    <!-- Use a Tomcat JNDI datasource -->
    <property name="connection.datasource">java:comp/env/jdbc/mydb</property>
    <property name="show_sql">false</property>
    <property name="use_outer_join">true</property>
    <property name="dialect">net.sf.hibernate.dialect.PostgreSQLDialect</property>
     
    <mapping resource="myclasses.hbm.xml"/>
     
    </session-factory>
     
    </hibernate-configuration>
    Benoit Moussaud - XebiaLabs - Automatisation des déploiements. Screencast & Demo

  4. #4
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 78
    Points : 73
    Points
    73
    Par défaut
    Par rapport à ce que j'ai pu voir dans les doc d'hibernate ça me parait très bien tout ça.

    merci pour tout, je vous tiens au courant.

  5. #5
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 78
    Points : 73
    Points
    73
    Par défaut
    Par contre je ne comprend pas bien cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <mapping resource="myclasses.hbm.xml"/>
    A quoi correspond "myclasses.hbm.xml" ?

  6. #6
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    C'est juste un exemple de déclaration d'un fichier .hbm définissant le mapping de classes. Oublies dans ton cas et mets tes propres fichiers de mapping

  7. #7
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 78
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par ego
    C'est juste un exemple de déclaration d'un fichier .hbm définissant le mapping de classes. Oublies dans ton cas et mets tes propres fichiers de mapping
    dsl mais qd on est perdu....

    j'ai tjrs le message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    net.sf.hibernate.HibernateException: Could not find datasource
    je suppose que c'est cette ligne qui est fausse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <property name="connection.datasource">java:comp/env/jdbc/xxx</property>
    à quoi correspond les "xxx", le nom de mon projet ou le nom de ma bd... ?

    maintenant mon fichier hibernate.cfg.xml ressemble à ça :
    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
     
    <hibernate-configuration>
    	<session-factory>
     
    	<!-- Use a Tomcat JNDI datasource -->
    		<property name="connection.datasource">java:comp/env/jdbc/axis</property>
    		<property name="show_sql">false</property>
    		<property name="use_outer_join">true</property>
    		<property name="dialect">net.sf.hibernate.dialect.PostgreSQLDialect</property>
     
    		<property name="hibernate.connection.driver_class">
    			com.mysql.jdbc.Driver
    		</property>
    		<!-- property name="hibernate.connection.pool_size"></property -->
    		<!-- dialect for MySQL -->
    		<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="../../Personnes.hbm" />
                   ...

  8. #8
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 78
    Points : 73
    Points
    73
    Par défaut
    Voici le message d'erreur que je retrouve dans la log de Tomcat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Could not find datasource: java:comp/env/jdbc/axis
    javax.naming.NameNotFoundException: Le Nom java:comp n'est pas lié à ce Contexte
    	at org.apache.naming.NamingContext.lookup(NamingContext.java:811)
    	at org.apache.naming.NamingContext.lookup(NamingContext.java:194)
    	at javax.naming.InitialContext.lookup(InitialContext.java:347)
    	at net.sf.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:44)
    	...

  9. #9
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Essayes jdbc/axis uniquement

  10. #10
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 78
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par ego
    Essayes jdbc/axis uniquement
    pas mieux...

    est-ce que ça peut être lié au fait que mon fichier hibernate.cfg.xml soit dans un .jar ?

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    il doit te manquer un resource-ref dans le web.xml je pense

    cf doc Tomcat (exemple ici avec MySql et Tomcat 5) : http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-examples-howto.html#Database%20Connection%20Pool%20(DBCP)%20Configurations
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  12. #12
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 78
    Points : 73
    Points
    73
    Par défaut
    j'ai rajouté dans mon web.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      <resource-ref>
      	<description></description>
      	<res-ref-name>jdbc/axis</res-ref-name>
      	<res-ref-type>javax.sql.DataSource</res-ref-type>
      	<res-auth>Container</res-auth>
      </resource-ref>
    mais rien y fait.

  13. #13
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 78
    Points : 73
    Points
    73
    Par défaut
    Finallement j'ai utilisé le pool de connexion c3po pour lequel javais des pbs de config également :

    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
     
    <?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>
     
    		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    		<property name="connection.url">jdbc:mysql://localhost:3306/maBase?autoReconnect=true</property>
    		<property name="connection.username">root</property>
    		<property name="connection.password"></property>
    		<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>
    		<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>		
     
    		<mapping resource="Personnes.hbm" />
                       ...
     
    	</session-factory>
    </hibernate-configuration>
    j'avais un pb dans la déclaration de mais balise <property> où il faut virer le "hibernate".

    Exemple :
    remplacer cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <property name="hibernate.connection.username">root</property>
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <property name="connection.username">root</property>
    ça peut tjrs servir à quelqu'un et en tout cas merci pour votre aide.

  14. #14
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Mais tu n'as pas vraiment résolu ton problème.
    Tu as simplement mis la définition de la DataSource directement dans le fichier Hibernate alors qu'au départ tu avais défini la DataSource dans Tomcat.
    ça fonctionne, bien sûr mais l'intention initiale n'est pas tout à fait la même.
    Probablement que le changement du nom de la property, tout en laissant la DataSource dans Tomcat fonctionne !!

  15. #15
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 78
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par ego
    Mais tu n'as pas vraiment résolu ton problème.
    Tu as simplement mis la définition de la DataSource directement dans le fichier Hibernate alors qu'au départ tu avais défini la DataSource dans Tomcat.
    ça fonctionne, bien sûr mais l'intention initiale n'est pas tout à fait la même.
    Probablement que le changement du nom de la property, tout en laissant la DataSource dans Tomcat fonctionne !!
    oui j'ai contourné le pb en utilisant le pool de connexion c3po dont la configuration est bien décrite dans "hibernate in action"

    le seul truc était de virer la racine "hibernate." dans la déclaration des "hibernate.connection.password" et autres...

    ça fait un peu bidouillage d'ailleurs.

  16. #16
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 78
    Points : 73
    Points
    73
    Par défaut
    J'ai finallement réussi à configurer le pool de connexion dbcp. Voici mon fichier 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    <?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>
     
    		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    		<property name="connection.url">jdbc:mysql://10.14.1.159:3306/maBase?autoReconnect=true</property>
    		<property name="connection.username">root</property>
    		<property name="connection.password"></property>
     
     
    	<!-- ### Apache DBCP Connection Pool ### -->
          <!-- connection pool -->
     
          <property name="dbcp.maxActive">10</property>
          <property name="dbcp.whenExhaustedAction">1</property>
          <property name="dbcp.maxWait">20000</property>
          <property name="dbcp.maxIdle">10</property>
          <property name="dbcp.initialSize">2</property>
     
     
          <!-- prepared statement cache -->
     
          <property name="dbcp.ps.maxActive">10</property>
          <property name="dbcp.ps.whenExhaustedAction">1</property>
          <property name="dbcp.ps.maxWait">20000</property>
          <property name="dbcp.ps.maxIdle">10</property>
     
     
          <!-- optional query to validate pooled connections: -->
     
          	<property name="dbcp.validationQuery">select 1</property>
          	<property name="dbcp.testOnBorrow">true</property>
          	<property name="dbcp.testOnReturn">false</property> 
    		<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
     
     
    		<mapping resource="../../Personnes.hbm" />

  17. #17
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    tu pourrais mettre les fichiers server.xml et web.xml associés?

    Merci.

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

Discussions similaires

  1. Réinitialiser le pool de connexions d'Hibernate
    Par archer dans le forum Hibernate
    Réponses: 2
    Dernier message: 24/08/2010, 18h04
  2. Pool de connexion + oc4j + hibernate + spring
    Par djerbi dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/10/2008, 00h17
  3. Hibernate et pool de connexion Tomcat
    Par K-Kaï dans le forum Hibernate
    Réponses: 8
    Dernier message: 09/08/2006, 17h21
  4. [EJB]JBoss et Pool de connexion
    Par Kleb dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 20/04/2004, 12h12
  5. [tomcat 4.1] [oracle] Pool de connexion
    Par Franco dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 23/09/2003, 00h42

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