Configurer Hibernate C3P0 le Regroupement de Connexion

Je suis tombé sur un problème tout en développant une Application Web basée sur Struts2 avec Spring et Hibernate.

Lorsque j'actualise le site un peu de temps, par exemple de 2 à 4 fois, Hibernate est montrant une exception sur Trop grand nombre de connexions. J'ai essayé de mettre en œuvre C3P0 pool de Connexion et d'avoir quelques problèmes avec elle


La hibernate.cfg.xml configuration:

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/axelle</property>
<property name="hibernate.connection.username">axelle</property>
<property name="hibernate.connection.password">dbpassword</property>
<property name="hibernate.current_session_context_class">thread</property>    

<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>

applicationContext.xml

<bean id="propertyConfigurer"
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
      p:location="classpath:jdbc.properties"/>

<bean id="dataSource"
      class="org.springframework.jdbc.datasource.DriverManagerDataSource"
      p:driverClassName="${jdbc.driverClassName}"
      p:url="${jdbc.url}"
      p:username="${jdbc.username}"
      p:password="${jdbc.password}"
      p:connectionProperties="${jdbc.connectionProperties}"/>

<!-- ADD PERSISTENCE SUPPORT HERE (jpa, hibernate, etc) -->

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>
</bean>

<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
        <ref local="sessionFactory"/>
    </property>
</bean>

La sortie du journal est:

org.hibernate.exception.JDBCConnectionException: Cannot open connection

et:

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"

Et c'est de cette façon PROCESSLIST MySQL fenêtre donne: http://img844.imageshack.us/img844/3959/be69273cc2.png


J'ai mis max_size de connexions à 20, mais il me semble qu'il ne lit pas les C3P0 un fichier de configuration, la cause de l'écran, nous pouvons voir que le nombre de connexions est supérieur à 20, ou peut-être que je suis en train de faire quelque chose de mal, mais où? J'ai vraiment besoin d'aide les gars, je vais apprécier ce, et merci d'avance.

Pouvez-vous vous assurer que vous êtes en fermant toutes les connexions que vous voulez ouvrir. C'est la cause de base de connexion de fuite
Désolé, mais c'est la première fois lorsque j'essaie de mettre en œuvre un pool de Connexion, peut vous conseiller, comment j'ai besoin de la fermer? mais de toute façon je suis en train de fermer toutes les sessions, après l'interrogation de la base de données avec transaction.commit(); session.flush(); session.close();.
Pourquoi pensez-vous que c3p0 est votre fournisseur de connexion?
Il vous manque connection.provider_class de la propriété.
J'ai lu sur DBCP et C3P0 et de la pensée que C3P0 est parfait pour moi.

OriginalL'auteur Denees | 2013-06-12