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 :

JNDI + C3P0 + Hibernate : problème de config


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Par défaut JNDI + C3P0 + Hibernate : problème de config
    Bonjour à tous,

    Après 2 jours complets de galère, je me tourne vers vous.
    Je vous explique le contexte :
    Je dois changer le mode de déclaration de la connexion à la base de données en passant d'une déclaration dans un hibernate.properties, qui est dans l'application, vers une déclaration de type JNDI de Tomcat v.6 afin de pouvoir configurer facilement la connexion pour chaque serveur.
    Je vous explique le paramétrage que j'ai effectué :
    1. J'ai déclaré dans $TOMCAT_HOME/conf/context.xml mon datasource à l'intérieur de la balise <context> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Resource name="jdbc/testDS" auth="Container" type="javax.sql.DataSource" username="postgres" password="postgres" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432/test"/>
    2. J'ai modifié mon fichier hibernate.cfg.xml dans le projet 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
     
    <session-factory>
      	<property name="connection.datasource">java:comp/env/jdbc/testDS</property>
          	<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
            <property name="hibernate.current_session_context_class">thread</property>
           	<property name="hibernate.default_schema">test</property>
    	    <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    	<!--     <property name="connection.driver_class">org.postgresql.Driver</property>  -->
     
         <!--    <property name="hibernate.session_factory_name">java:hibernate/HibernateUtilGeneric</property>  -->
          	<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
     
         	<property name="c3p0.idleConnectionTestPeriod">300</property>
    		<!-- configuration pool via c3p0--> 
    		<property name="c3p0.acquire_increment">1</property> 
    		<property name="c3p0.idle_test_period">100</property> <!-- seconds --> 
    		<property name="c3p0.max_size">100</property> 
    		<property name="c3p0.max_statements">12</property> 
    		<property name="c3p0.min_size">10</property> 
    		<property name="c3p0.timeout">100</property> <!-- seconds -->
    <mapping ....../>
    </session-factory>
    3. J'ai modifié mon code pour accéder au profil JNDI dans le projet 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
     
    public class HibernateUtilGeneric {
    	static Logger log = Logger.getLogger(HibernateUtilGeneric.class);
    	public static final SessionFactory sessionFactory;
     
    	static {
    		try {
    			Properties prop =new Properties();
    			log.debug("Enumerate properties....");
    			Properties p = System.getProperties();
    			for (Object obj : p.keySet()) {
    				log.debug(obj.toString() + " = " + System.getProperty(obj.toString()));
    			}
    			// InitialContext ic = new InitialContext(); //lorsque ce mode d'init est //actif, j'ai un problème de cast en dbcp (au lieu de C3P0) et hibernate.connection...
    			sessionFactory = new Configuration().configure().buildSessionFactory(); 
    				//(SessionFactory) ic.lookup("java:comp/env/jdbc/p2wDS");
     
    			if(sessionFactory==null){
    				log.error("SessionFactory is NOT DEFINED");
    			}else{
    				log.info("SessionFactory defined successfully");
    			}
     
    		} catch (Throwable ex) {
    			// Make sure you log the exception, as it might be swallowed
    			log.error("Initial SessionFactory creation failed." + ex);
    			throw new ExceptionInInitializerError(ex);
    		}
    	}
    4. Au cas où, j'ai changer mon web.xml dans mon appli web :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     <resource-ref>
          <description>DB Connection</description>
          <res-ref-name>jdbc/testDS</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
      </resource-ref>
    Voilà pour la config.
    Le problème que je rencontre peut être différent en fonction de mes configs. Pour l'instant après pas mal de recherche, la config ci-dessus semble être la moins mauvaise. Cependant, elle est nulle car elle ne fonctionne. Avec cette config j'obtiens le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    2010-01-15 11:27:40,174	INFO	C3P0 using driver: null at URL: null	org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:50)
    2010-01-15 11:27:40,175	INFO	Connection properties: {}	org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:51)
    2010-01-15 11:27:40,175	INFO	autocommit mode: false	org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:54)
    2010-01-15 11:27:40,175	WARN	No JDBC Driver class was specified by property hibernate.connection.driver_class	org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:57)
    2010-01-15 11:27:40,193	INFO	MLog clients using log4j logging.	com.mchange.v2.log.MLog.<clinit>(MLog.java:80)
    2010-01-15 11:27:40,524	INFO	Initializing c3p0-0.9.1 [built 16-January-2007 14:46:42; debug? true; trace: 10]	com.mchange.v2.c3p0.C3P0Registry.banner(C3P0Registry.java:204)
    2010-01-15 11:27:40,646	INFO	Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@99921a67 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@3b4b8dc6 [ acquireIncrement -> 1, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> z8kfsx86dqojf21f8ijxe|3cbb4b, idleConnectionTestPeriod -> 100, initialPoolSize -> 10, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 100, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 100, maxStatements -> 12, maxStatementsPerConnection -> 0, minPoolSize -> 10, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@e57aa936 [ description -> null, driverClass -> null, factoryClassLocation -> null, identityToken -> z8kfsx86dqojf21f8ijxe|17748d3, jdbcUrl -> null, properties -> {} ], preferredTestQuery -> null, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, factoryClassLocation -> null, identityToken -> z8kfsx86dqojf21f8ijxe|1be4663, numHelperThreads -> 3 ]	com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getPoolManager(AbstractPoolBackedDataSource.java:462)
    2010-01-15 11:28:00,644	WARN	com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@948069 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!	com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector.run(ThreadPoolAsynchronousRunner.java:608)
    2010-01-15 11:28:00,668	WARN	com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@948069 -- APPARENT DEADLOCK!!! Complete Status: 
    	Managed Threads: 3
    	Active Threads: 3
    	Active Tasks:
    J'ai donc un problème dans la lecture du JNDI de TOMCAT.

    - Voyez-vous une erreur stupide qui pourrait me régler le problème en 2 secondes ?
    - Pensez-vous que la balise <context> dans $TOMCAT_HOME/conf/context.xml doit spécifier obligatoirement les attributs docBase="" et path="" (j'ai déjà essayé cela ne marche pas mieux) ? Dans le cas où ces attributs ne sont pas spécifiés cela s'applique pour toutes les applications de tomcat ? Faut-il placer le fichier dans $TOMCAT_HOME/conf/catalina/$NOMAPPLICATION.xml (déjà essayé aussi) ?

    Les docs que j'ai lu :
    - How to JNDI Tomcat
    - How to datasource Tomcat
    - Pourquoi utiliser JNDI et sa config : un bon article
    - How to configure C3P0 with Hibernate
    - Beaucoup d'autre généralement moins bien....

    Je me sens vraiment désarmé face à ce problème qui semble pourtant extrêmement simple. Si vous avez des solutions, n'hésitez surtout pas.

    Je vous remercie sincèrement pour vos réponses.
    J'espère que la solution sera débile (ce qui risque d'etre le cas selon les lois de murphy).
    Merci encore.
    Quentin.
    Tomcat V.6
    JDK 1.6
    Eclipse Galileo
    Ubuntu 9.10

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Par défaut
    Bonjour,
    Avez-vous déjà eu ce genre de problème ? Je n'arrive toujours pas à le résoudre.
    Merci pour votre aide.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 7
    Par défaut
    même problème si quelqu'un a une réponse.

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 84
    Par défaut
    Je suis tombé sur ton post en essayant moi aussi de configurer une datasource via un profil JNDI dans la config d'hibernate.

    Je ne sais pas si ca t'aidera mais j'ai réussi avec ce fichier de config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?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/testHibernateDS</property>
    		<property name="show_sql">true</property>
    		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    		<property name="hibernate.hbm2ddl.auto">update</property>
    		<mapping resource="fr/airfrance/testhibernateds/bo/person.hbm.xml" />
    	</session-factory>
    </hibernate-configuration>
    avec dans META-INF/context.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      <Resource name="jdbc/testHibernateDS" auth="Container" type="javax.sql.DataSource"
                   maxActive="100" maxIdle="30" maxWait="10000"
                   username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
                   url="jdbc:mysql://localhost/test_hibernate"/>
    et dans WEB-INF/web.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <resource-ref>
    		<description>
    		</description>
    		<res-ref-name>jdbc/testHibernateDS</res-ref-name>
    		<res-type>javax.sql.DataSource</res-type>
    		<res-auth>Container</res-auth>
    		<res-sharing-scope>Shareable</res-sharing-scope>
    	</resource-ref>

Discussions similaires

  1. [Data] Problème connexion C3P0 Hibernate
    Par kilicool dans le forum Spring
    Réponses: 1
    Dernier message: 05/11/2009, 16h26
  2. [Hibernate] problème d'insertion dans la base de données
    Par Willy7901 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 18/08/2005, 13h19
  3. [hibernate]Problème de récupération d'objet...
    Par roxx62 dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/07/2005, 11h36
  4. [plugin hibernate] problème d'installation
    Par slymira dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 09/06/2005, 13h06
  5. [eclipse] [jonas] problèmes de config
    Par sylvanians dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 28/09/2004, 09h15

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