-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: probleme de pool de connexion
PostPosted: Thu Jul 24, 2008 10:46 am 
Newbie

Joined: Thu Jul 24, 2008 10:25 am
Posts: 4
Hibernate version: 3.2
Name and version of the database you are using: PostGreSQL 8.3
Actuellement, mon application web doit pouvoir tourner avec 100 threads en simultané. Le problème est que l'application s'effondre dès qu'il y a plus de 10 threads. J'ai déjà lu la doc d'hibernate afin de comprendre mes erreurs et ce fut très instructif. Cependant, je ne trouve pas comment régler ce problème. Est-ce une mauvaise gestion du pool avec c3p0, des sessions,des transaction ou de la sessionFactory? Pouriez vous m'iader car je suis totalement perdu.

voici le code source de mon fichier hibernate.cfg.xml :
Code:
<?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 >

      <!-- local connection properties -->
      <!-- peut etre rajouter hibernate. avant -->
      <property name="connection.url">jdbc:postgresql://localhost/Report</property>
      <property name="connection.driver_class">org.postgresql.Driver</property>
      <property name="connection.username">mathieu</property>
      <property name="connection.password">mathieu</property>
         
      <!-- configuration pool via c3p0-->
      <property name="c3p0.acquire_increment">1</property>
      <property name="c3p0.idle_test_period">50</property> <!-- seconds -->
      <property name="c3p0.max_size">200</property>
      <property name="c3p0.max_statements">0</property>
      <property name="c3p0.min_size">20</property>
      <property name="c3p0.timeout">10</property> <!-- seconds -->
      
      <!-- EhCache -->
      <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
      <property name="hibernate.cache.use_query_cache">true</property>
      <property name="hibernate.cache.use_second_level_cache">true</property>
      <property name="hibernate.cache.use_structured_cache">true</property>
      <property name="hibernate.cache.use_minimal_puts">true</property>
      
      <!-- reglage des transaction -->
      <!--<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>-->
      <property name="hibernate.connection.release_mode">auto</property>
      <property name="hibernate.hbm2ddl.auto">update</property>
      
      <!-- regalge fetch plan -->
      <property name="hibernate.max_fetch_depth">2</property>
      <property name="hibernate.default_batch_fetch_size">4</property>
      
      <!-- dialect for PostgreSQL -->
        <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="hibernate.show_sql">false</property>
      
      <!-- mapping for Table -->
      <mapping resource="com/modele/donnees/Base.hbm.xml"/>
      <mapping resource="com/modele/donnees/CodeAffectation.hbm.xml"/>
      <mapping resource="com/modele/donnees/CompteRendu.hbm.xml"/>
      <mapping resource="com/modele/donnees/Departement.hbm.xml"/>
      <mapping resource="com/modele/donnees/Membre.hbm.xml"/>
      <mapping resource="com/modele/donnees/Message.hbm.xml"/>
      <mapping resource="com/modele/donnees/Poste.hbm.xml"/>
      <mapping resource="com/modele/donnees/Recherche.hbm.xml"/>
      <mapping resource="com/modele/donnees/Statut.hbm.xml"/>
      <mapping resource="com/modele/donnees/LienCompteRendu.hbm.xml"/>
      <mapping resource="com/modele/donnees/LienMembreCompteRendu.hbm.xml"/>
      
   </session-factory>
</hibernate-configuration>


voici le code source de ma connexion :
Code:
package com.dao.connexion;

import org.hibernate.HibernateException;
import org.hibernate.classic.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class connexion
{
   private static final SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
   
   public static final ThreadLocal<Session> session = new ThreadLocal<Session>();
   
   public static Session currentSession() throws HibernateException
   {
      Session s = (Session) session.get();
//      Ouvre une nouvelle Session, si ce Thread n'en a aucune
      if (s == null)
      {
         s = sessionFactory.openSession();
         session.set(s);
      }
      return s;
   }

   public static void closeSession()
   throws HibernateException
   {
      Session s = (Session) session.get();
      session.set(null);
      if (s != null)
         s.close();
   }
}

voici un exemple d insert :
Code:
try
   {
   session = connexion.currentSession();
        try
      {
         Departement nouveauDepartement = new Departement();
         nouveauDepartement.setNomDepartement(recupererSaisie ("nom"));
         nouveauDepartement.setCodeDepartement(recupererSaisie ("code departement"));
         Base base = (Base)session.get(Base.class, Integer.parseInt(recupererSaisie("base")));
         nouveauDepartement.setBase(base);
         base.getDepartements().add(nouveauDepartement);
         Transaction transaction = session.beginTransaction();
         try
         {
            session.save(nouveauDepartement);
            transaction.commit();
            session.evict(nouveauDepartement);
         }
         catch (RuntimeException e)
         {
            this.erreur = true;
            transaction.rollback();
            session.evict(nouveauDepartement);
            new RapportErreur(e,classe);
         }
      }
      catch (HibernateException ex)
      {
         this.erreur = true;
         new RapportErreur((Exception)ex, classe);
      }
      catch (NullPointerException e)
      {
         this.erreur = true;
         new RapportErreur(e,classe);
      }
}
catch (Exception ex)
{
   new RapportErreur(ex,classe);
   this.erreur=true;
}
finally
{
   session.clear();
   connexion.closeSession();
}


Full stack trace of any exception that occurs:
Cannot open connection

PS: J'utilise Jmeter pour tester la monter en charge jusqu'à 80 threads.[/code]


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.