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

Spring Java Discussion :

c3p0 + spring: freeze [Data]


Sujet :

Spring Java

  1. #1
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut c3p0 + spring: freeze
    Bonjour tt le monde,

    j'essaie de faire fonctionner spring + c3p0 ensemble, et j'ai un petit problème.

    Des nouvelles connexions sont ouvertes à quasiment chaque requête. Mon pool est rapidement saturé de connexions inutilisées... et mon application freeze en attendant d'acquérir des connexions

    Voici un extrait des logs c3p0:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DEBUG - BasicResourcePool          - acquire test -- pool size: 12; target_pool_size: 12; desired target? 13
    DEBUG - BasicResourcePool          - incremented pending_acquires: 1
    DEBUG - BasicResourcePool          - incremented pending_acquires: 2
    ...
     com.mchange.v2.c3p0.impl.NewPooledConnection@1169fb2)
    DEBUG - BasicResourcePool          - trace com.mchange.v2.resourcepool.BasicResourcePool@4ce427 [managed: 15, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@1169fb2)
    DEBUG - BasicResourcePool          - trace com.mchange.v2.resourcepool.BasicResourcePool@4ce427 [managed: 15, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@1169fb2)
    DEBUG - BasicResourcePool          - trace com.mchange.v2.resourcepool.BasicResourcePool@4ce427 [managed: 15, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@1169fb2)
     DEBUG - BasicResourcePool          - acquire test -- pool is already maxed out. [managed: 15; max: 15]
    DEBUG - BasicResourcePool          - awaitAvailable(): com.mchange.v2.c3p0.impl.NewPooledConnection@1169fb2
    DEBUG - BasicResourcePool          - trace com.mchange.v2.resourcepool.BasicResourcePool@4ce427 [managed: 15, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@1169fb2)
    Voici la configuration spring:
    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                               http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
                               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
     
     
        <!-- DAO's -->
        <bean id="ConfigDAO" class="hibernate.ConfigDAO">
            <property name="sessionFactory">
                <ref bean="sessionFactory" />
            </property>
        </bean>
        <!-- ... plein de DAO déclarés-->
     
     
     
        <bean id="myDataSource"
            class="com.mchange.v2.c3p0.ComboPooledDataSource"
            destroy-method="close">
            <property name="driverClass" value="com.mysql.jdbc.Driver" />
            <property name="jdbcUrl"
                value="jdbc:mysql://localhost/xxx" />
            <property name="user" value="xxx" />
            <property name="password" value="xxx" />
     
        </bean>
     
     
     
        <bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">        
            <property name="configLocation">
                <value>classpath:hibernate.cfg.xml</value>
            </property>
            <property name="dataSource">
                <ref bean="myDataSource" />
            </property>
     
        </bean>
     
        <bean id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory">
                <ref bean="sessionFactory" />
            </property>
        </bean>
     
     
        <!-- SERVICES -->
        <bean id="GeneralServiceTarget" class="services.GeneralService">
            <property name="sessionFactory">
                <ref bean="sessionFactory" />
            </property>
        </bean>
        <bean id="GeneralService"
            class="org.springframework.aop.framework.ProxyFactoryBean">
            <property name="proxyInterfaces">
                <value>services.IGeneralService</value>
            </property>
            <property name="interceptorNames">
                <list>
                    <value>generalServiceTransactionInterceptor</value>
                    <value>GeneralServiceTarget</value>
                </list>
            </property>
        </bean>
        <bean id="generalServiceTransactionInterceptor"
            class="org.springframework.transaction.interceptor.TransactionInterceptor">
            <property name="transactionManager">
                <ref bean="transactionManager" />
            </property>
            <property name="transactionAttributeSource">
                <value>
                    services.IGeneralService.*=PROPAGATION_REQUIRED
                </value>
            </property>
        </bean>
    </beans>
    Le fichier hibernate.cfg.xml ne contient que la définition de mes fichiers de mapping *.hbm.xml

    Et ici mon web.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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        version="2.4">
     
        <session-config>
            <session-timeout>60</session-timeout>
        </session-config>
     
        <display-name>XYZ</display-name>
     
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
     
        <filter>
            <filter-name>openSessionInViewFilterXXX</filter-name>
            <filter-class>
                org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
            </filter-class>
        </filter>
     
     
        <filter-mapping>
            <filter-name>openSessionInViewFilterXXX</filter-name>
            <url-pattern>/xxx/*</url-pattern>
        </filter-mapping>
        
        
        <filter>
            <filter-name>openSessionInViewFilterYYY</filter-name>
            <filter-class>
                org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
            </filter-class>
        </filter>
     
     
        <filter-mapping>
            <filter-name>openSessionInViewFilterYYY</filter-name>
            <url-pattern>/yyy/*</url-pattern>
        </filter-mapping>
     
        <listener>
            <listener-class>
                org.springframework.web.context.ContextLoaderListener
            </listener-class>
        </listener>
     
     
        <filter>
            <filter-name>XXX</filter-name>
            <filter-class>
                org.apache.wicket.protocol.http.WicketFilter
            </filter-class>
            <init-param>
                <param-name>applicationClassName</param-name>
                <param-value>xxx.XXX</param-value>
            </init-param>
        </filter>
     
        <filter-mapping>
            <filter-name>XXX</filter-name>
            <url-pattern>/xxx/*</url-pattern>
        </filter-mapping>
     
     
        <filter>
            <filter-name>YYY</filter-name>
            <filter-class>
                org.apache.wicket.protocol.http.WicketFilter
            </filter-class>
            <init-param>
                <param-name>applicationClassName</param-name>
                <param-value>yyy.YYY</param-value>
            </init-param>
        </filter>
     
        <filter-mapping>
            <filter-name>YYY</filter-name>
            <url-pattern>/yyy/*</url-pattern>
        </filter-mapping>
     
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
    Est-ce que quelqu'un sait ce qu'il manque?

    Merci d'avance!!
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par Pill_S Voir le message
    Bonjour tt le monde,

    j'essaie de faire fonctionner spring + c3p0 ensemble, et j'ai un petit problème.

    Des nouvelles connexions sont ouvertes à quasiment chaque requête. Mon pool est rapidement saturé de connexions inutilisées... et mon application freeze en attendant d'acquérir des connexions

    V
    Voici la configuration spring:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
      <bean id="myDataSource"
            class="com.mchange.v2.c3p0.ComboPooledDataSource"
            destroy-method="close">
            <property name="driverClass" value="com.mysql.jdbc.Driver" />
            <property name="jdbcUrl"
                value="jdbc:mysql://localhost/xxx" />
            <property name="user" value="xxx" />
            <property name="password" value="xxx" />
     
        </bean>
    Est-ce que quelqu'un sait ce qu'il manque?

    Merci d'avance!!
    avez-vous essayez en ajoutant au datasource les propriétés suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		<property name="initialPoolSize"><value>…</value></property>
    		<property name="minPoolSize"><value>…</value></property>
    		<property name="maxPoolSize"><value>…</value></property>
    ?

    (essayez avec qqchose comme initialPoolSize =5, minPoolSize=5 et maxPoolSize=30 pour commencer…)

  3. #3
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Hello,

    oui, j'ai essayé plein de variantes, et ça ne change rien. La seule chose qui change, c'est la durée de fonctionnement avant de freezer...

    On dirait que spring ne relâche pas la connexion après les requêtes...

    Un truc bizarre dans la stacktrace, c'est que l'on me parle à la fois d'un C3P0PooledConnectionPool et aussi d'un BasicResourcePool....

    N'importe quelle idée est la bienvenue!
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par Pill_S Voir le message
    Hello,

    oui, j'ai essayé plein de variantes, et ça ne change rien. La seule chose qui change, c'est la durée de fonctionnement avant de freezer...

    On dirait que spring ne relâche pas la connexion après les requêtes...

    Un truc bizarre dans la stacktrace, c'est que l'on me parle à la fois d'un C3P0PooledConnectionPool et aussi d'un BasicResourcePool....

    N'importe quelle idée est la bienvenue!
    problème de compatibilité entre les versions des jars utilisées ?

    ici des settings similaires avec spring-254 et c3p0-912 fonctionnent bien…
    mais postgresql et oracle pas mysql,

    d'où première question : bonne version du driver mysql ?

  5. #5
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Oui, normalement... Par acquis de conscience, j'ai downgradé vers une version antérieure et cela ne change rien.

    Précision: je suis en train d'ajouter spring à une application qui tournait avec hibernate précédement. Ce problème est tout nouveau (il n'apparaissait pas avant d'ajouter spring)...

    A chaque clic sur mes liens, je vois le nombre de connexions qui augmente dans le pool.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    [managed: 3, unused: 2, excluded: 0]
    [managed: 3, unused: 1, excluded: 0]
    [managed: 3, unused: 0, excluded: 0]
    [managed: 6, unused: 2, excluded: 0]
    [managed: 6, unused: 1, excluded: 0]
    ...
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  6. #6
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Encore une précision: je viens d'essayer dbcp à la place de c3p0, et le problème persiste...

    Est-ce que je dois manuellement remettre les connexions au pool après utilisation? C'est plutôt à spring de gérer tout ça non?

    Est-ce que je ne devrais pas rajouter un interceptor quelque part?
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  7. #7
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Je crois que j'ai enfin trouvé!! (pas trop tôt)

    j'ai ajouté ceci dans mes hibernateProperties:
    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
    <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">
                        org.hibernate.dialect.MySQLInnoDBDialect
                    </prop>
                    <prop key="hibernate.connection.release_mode">
                        auto
                    </prop>
                    <prop key="hibernate.c3p0.acquire_increment">1</prop>
                    <prop key="hibernate.c3p0.minPoolSize">3</prop>
                    <prop key="hibernate.c3p0.maxPoolSize">20</prop>
                    <prop key="hibernate.c3p0.timeout">50</prop>
                    <prop key="hibernate.c3p0.max_statement">0</prop>
                    <prop key="hibernate.c3p0.idle_test_period">30</prop>
                </props>
            </property>
    Et du coup, mon pool reste à un bas niveau d'utilisation

    Maintenant, je ne sais pas exactement ce que cela implique... En tout cas, mon appli n'a jamais été aussi véloce que depuis que je suis passé à Spring

    Merci pour ton aide

    PS: j'ai aussi du downgradé vers spring 2.0.8
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  8. #8
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour l'info, ça faisait deux jours que je cherchais pourquoi j'avais des "freezes".

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

Discussions similaires

  1. appli spring + swing freeze : comment trouver où ?
    Par axel584 dans le forum Spring
    Réponses: 0
    Dernier message: 15/11/2011, 21h42
  2. pb de gestion de pool avec c3p0 et spring 2
    Par sinus dans le forum JDBC
    Réponses: 3
    Dernier message: 14/11/2006, 23h53
  3. [JSF-SPRING-HIBERNATE] Freeze . .
    Par gondek dans le forum JSF
    Réponses: 5
    Dernier message: 04/09/2006, 14h04
  4. [TOMCAT] Tomcat "freeze"...
    Par psylo dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 23/06/2004, 13h33
  5. Réponses: 4
    Dernier message: 04/12/2002, 11h07

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