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

JDBC Java Discussion :

JDBC / POSTGRESQL / Trop de connexions ..


Sujet :

JDBC Java

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut JDBC / POSTGRESQL / Trop de connexions ..
    Bonjour à tous,

    Je développe actuellement un projet avec une base de données PostgresSQL. J'utilise Spring, JDBC et BoneCP.

    Je lance un web service qui lance une requête du genre "select * from ma table" et j'obtiens l'erreur suivante :

    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    2012-06-07 12:52:16.861:WARN:oejs.ServletHandler:/projet/product/get
    org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.postgresql.util.PSQLException: FATAL: d??sol??, trop de clients sont d??j?? connect??s
    	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
    	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:572)
    	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636)
    	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665)
    	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:673)
    	at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:733)
    	at com.wpf.projet.db.JDBCMerchantDAO.getMerchant(JDBCMerchantDAO.java:55)
    	at com.wpf.projet.resources.ProductResource.getProduct(ProductResource.java:64)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:616)
    	at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
    	at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)
    	at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
    	at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
    	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
    	at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
    	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
    	at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
    	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
    	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
    	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
    	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
    	at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
    	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
    	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
    	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:558)
    	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:488)
    	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
    	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:483)
    	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)
    	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:973)
    	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:417)
    	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
    	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:907)
    	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
    	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
    	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
    	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
    	at org.eclipse.jetty.server.Server.handle(Server.java:346)
    	at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:442)
    	at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:924)
    	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:582)
    	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218)
    	at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51)
    	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586)
    	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44)
    	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598)
    	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)
    	at java.lang.Thread.run(Thread.java:679)
    Caused by: 
    org.postgresql.util.PSQLException: FATAL: d??sol??, trop de clients sont d??j?? connect??s
    	at org.postgresql.core.v3.ConnectionFactoryImpl.readStartupMessages(ConnectionFactoryImpl.java:469)
    	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:112)
    	at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
    	at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
    	at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
    	at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22)
    	at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:30)
    	at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
    	at org.postgresql.Driver.makeConnection(Driver.java:393)
    	at org.postgresql.Driver.connect(Driver.java:267)
    	at java.sql.DriverManager.getConnection(DriverManager.java:620)
    	at java.sql.DriverManager.getConnection(DriverManager.java:200)
    	at com.jolbox.bonecp.BoneCP.obtainRawInternalConnection(BoneCP.java:256)
    	at com.jolbox.bonecp.ConnectionHandle.obtainInternalConnection(ConnectionHandle.java:211)
    	at com.jolbox.bonecp.ConnectionHandle.<init>(ConnectionHandle.java:170)
    	at com.jolbox.bonecp.BoneCP.<init>(BoneCP.java:371)
    	at com.jolbox.bonecp.BoneCPDataSource.maybeInit(BoneCPDataSource.java:150)
    	at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:112)
    	at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
    	at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
    	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:572)
    	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636)
    	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665)
    	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:673)
    	at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:733)
    	at com.wpf.projet.db.JDBCMerchantDAO.getMerchant(JDBCMerchantDAO.java:55)
    	at com.wpf.projet.resources.ProductResource.getProduct(ProductResource.java:64)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:616)
    	at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
    	at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)
    	at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
    	at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
    	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
    	at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
    	at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
    	at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
    	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
    	at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
    	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
    	at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
    	at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
    	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
    	at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
    	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:558)
    	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:488)
    	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
    	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:483)
    	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:233)
    	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:973)
    	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:417)
    	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
    	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:907)
    	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
    	at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
    	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149)
    	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
    	at org.eclipse.jetty.server.Server.handle(Server.java:346)
    	at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:442)
    	at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:924)
    	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:582)
    	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218)
    	at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:51)
    	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:586)
    	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:44)
    	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:598)
    	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)
    	at java.lang.Thread.run(Thread.java:679)
    192087 [BoneCP-pool-watch-thread] ERROR com.jolbox.bonecp.PoolWatchThread  - Error in trying to obtain a connection. Retrying in 7000ms
    org.postgresql.util.PSQLException: FATAL: d??sol??, trop de clients sont d??j?? connect??s
    	at org.postgresql.core.v3.ConnectionFactoryImpl.readStartupMessages(ConnectionFactoryImpl.java:469)
    	at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:112)
    	at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
    	at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
    	at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
    	at org.postgresql.jdbc3g.AbstractJdbc3gConnection.<init>(AbstractJdbc3gConnection.java:22)
    	at org.postgresql.jdbc4.AbstractJdbc4Connection.<init>(AbstractJdbc4Connection.java:30)
    	at org.postgresql.jdbc4.Jdbc4Connection.<init>(Jdbc4Connection.java:24)
    	at org.postgresql.Driver.makeConnection(Driver.java:393)
    	at org.postgresql.Driver.connect(Driver.java:267)
    	at java.sql.DriverManager.getConnection(DriverManager.java:620)
    	at java.sql.DriverManager.getConnection(DriverManager.java:200)
    	at com.jolbox.bonecp.BoneCP.obtainRawInternalConnection(BoneCP.java:256)
    	at com.jolbox.bonecp.ConnectionHandle.obtainInternalConnection(ConnectionHandle.java:211)
    	at com.jolbox.bonecp.ConnectionHandle.<init>(ConnectionHandle.java:170)
    	at com.jolbox.bonecp.PoolWatchThread.fillConnections(PoolWatchThread.java:101)
    	at com.jolbox.bonecp.PoolWatchThread.run(PoolWatchThread.java:82)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    	at java.lang.Thread.run(Thread.java:679)
    J'ai relancé le service postgresql, puis ça fonctionne... mais pour combien de temps.

    Auriez-vous une idée pour comment bien paramétrer ?

    Pour info, voici mon paramétrage dans mon beans.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
     
    <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
            <property name="driverClass" value="${jdbc.driverClass}"/>
            <property name="jdbcUrl" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
            <property name="idleConnectionTestPeriodInMinutes" value="60"/>
            <property name="idleMaxAgeInMinutes" value="1"/>
            <property name="maxConnectionsPerPartition" value="15"/>
            <property name="minConnectionsPerPartition" value="3"/>
            <property name="partitionCount" value="3"/>
            <property name="acquireIncrement" value="5"/>
            <property name="statementsCacheSize" value="100"/>
            <property name="releaseHelperThreads" value="3"/>
            <property name="closeConnectionWatch" value="true"/>
            <property name="maxConnectionAgeInSeconds" value="0" /> <!-- 7200 -->
        </bean>
    Merci

    Vince

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Est-ce que te connexions sont bien libérées après utilisation ?

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    je pensais que de cette façon, il n'y avait pas besoin de gérer justement les libérations de connexion..
    Comment s'en charger?
    Merci

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Fermer tes resultsets, tes statements et tes connexions.

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    pour info, voici mon code d'appel SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String SQL = "SELECT * FROM marchand"
    	            + " WHERE idmarchand = ?";
    	    try {
    	        return (Merchant) this.jdbcTemplate.queryForObject(SQL,
    	                new MerchantMapper(),new Object[]{merchantId});
    } catch (EmptyResultDataAccessException e) {
    	        return null;
    	    }
    J'utilise un resultset dans mon MerchantMapper, est-ce bien celui-ci que je dois fermer à chaque fois ?
    je n'ai pas de statements et de connexion...
    Vince

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    L'idée est de libérer les ressources, pool de connexions ou pas.
    Je ne connais pas bien JdbcTemplate, mais regarde les bonnes pratiques.
    A priori tu n'as pas à te soucier de la connexion, mais si tu as un ResultSet, il faut le fermer.

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    j'essaie de fermer les resulset, mais j'obtiens une erreur :

    voici monde code :

    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
     
    public static final class MerchantMapper implements RowMapper<Merchant> {
    		public Merchant mapRow(ResultSet rs, int rowNum) throws SQLException {
    	    	Merchant m = new Merchant();
    	    	m.setMerchantId(rs.getLong("idmarchand"));
    	        m.setTypeMerchant(rs.getInt("type"));
    	        m.setName(rs.getString("nom"));
    	        m.setAddress(rs.getString("adresse"));
    	        m.setCplAddress(rs.getString("compladresse"));
    	        m.setZip(rs.getString("codepostal"));
    	        m.setCity(rs.getString("ville"));
    	        m.setDepartment(rs.getString("departement"));
    	        m.setCountry(rs.getString("pays"));
    	        m.setURLProductInfo(rs.getString("urlproduit"));
    	        m.setURLBuyProduct(rs.getString("urlachat"));
    	        m.setDesc(rs.getString("description"));
    	        m.setUrlLogo(rs.getString("urllogo"));
    	        m.setMinAmount(rs.getLong("montantminimum"));
     
    	        rs.close();
    	        return m;
    	    }
    	}
     
    	// Récupération des informations du commercant
    	public Merchant getMerchant(long merchantId) {
    		String SQL = "SELECT * FROM marchand"
    	            + " WHERE idmarchand = ?";
     
     
    		try {
    	        return (Merchant) this.jdbcTemplate.queryForObject(SQL,
    	                new MerchantMapper(),new Object[]{merchantId});
    	    } catch (EmptyResultDataAccessException e) {
    	        //this will return a null if the query cant find any countried with
    	        //code given by the user
    	        return null;
    	    }
    	}
    et j'obtiens :

    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
     
    Problem accessing /eyebuy/product/get. Reason:
     
        PreparedStatementCallback; uncategorized SQLException for SQL [SELECT * FROM marchand WHERE idmarchand = ?]; SQL state [55000]; error code [0]; This ResultSet is closed.; nested exception is org.postgresql.util.PSQLException: This ResultSet is closed.
     
    Caused by:
     
    org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT * FROM marchand WHERE idmarchand = ?]; SQL state [55000]; error code [0]; This ResultSet is closed.; nested exception is org.postgresql.util.PSQLException: This ResultSet is closed.
    	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
    	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    	at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:602)
    	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636)
    	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665)
    	at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:673)
    	at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:733)
    une solution ?

    merci

    Vince

  8. #8
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    nous rencontrons le même type de problème entre notre open erp V6.1 et postgresql V9.1.

    les élèves se connectent à leur base de données. Au bout d'un certain temps, il n'est plus possible de se connecter car un message s'affiche au milieu de l'écran "FATAL ERROR: désolé, trop de client connecté".
    cela fait aujourd'hui 24h que je suis sur ce problème pour lequel je ne trouve aucune solution.

    je pense avoir fait le tour au niveau des fichiers de configuration et du fameux paramètre "max_connections"

    pour débloquer la situation, je lance un Reboot du serveur Debian. Mais cela ne va pas pouvoir durer...


    avez-vous une solution ?

    Cordialement,

  9. #9
    Membre habitué Avatar de JQueen
    Inscrit en
    Octobre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 214
    Points : 126
    Points
    126
    Par défaut
    Salut,

    il n'y a pas longtemps, j'avais un problème similaire.
    J'ai une application web qui fait certaines manipulations en base dont l'insertion d'objets. Quand je lance une insertion d'un très grand nombre d'objets, au bout d'un moment j'ai l'erreur oracle "nombre maximum de curseurs ouverts dépassé".

    A première vue, je pensais que c'est le nombre de connexions ouvertes qui pose problème. Mais en utilisant un outil de profiling (yourkit), j'ai trouvé que c'est le nombre de statements ouverts et non fermés qui cause ce problème. J'ai donc du vérifier pour toutes les classes de mon application (une cinquantaine) la fermeture des connexions/statements/resultSet.

    Je propose comme solution l'utilisation d'un outil de profiling pour mieux analyser le comportement du nombre de connexions/statements/resultSet ouverts et non fermés.

  10. #10
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2016
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Après avoir traité mon problème avec des personnes sur le TChat, en ce qui me concerne, le problème est situé au niveau de postgresql. Les connexions restent actives même si les utilisateurs se déconnectes "proprement" du client web open ERP via le bouton "déconnexion".

    sur mon serveur, je peux constater toutes les connexions ouvertes via la commande SELECT * FROM pg_stat_activity.
    pour avoir le nombre total de connexions ouvertes: SELECT count(*) FROM pg_stat_activity
    dans le fichier de configuration de postgresql, le paramètre de max_connections est fixé à 130.

    après avoir redémarré mon serveur, toutes les connexions ont été "purgées", j'ai donc simulé des connexions aux bases de données utilisateurs via le client web open erp en pensant à me déconnecter a chaque fois tout en observant le nombre de connexions actives sur mon serveur. J'ai rapidement constaté que dès que le nombre de connexions est arrivé à 130, le client web open erp affiche le fameux message "FATAL ERROR: désolé, trop de client connecté".

    le problème serait donc que open erp ne ferme pas les connexions à postgresql quand les utilisateurs font "déconnexion".

    j'ai donc cherché un moyen de purger ces connexions "bloquées" dans postgresql.
    j'ai essayé ceci:

    SELECT
    pg_terminate_backend(procpid)
    FROM
    pg_stat_activity
    WHERE
    current_query = '<IDLE>'
    AND
    now() - query_start > '01:00:00';

    j'ai constaté que les connexions pouvaient êtres purgées via cette commande SQL éventuellement incorporée dans une crontab, le problème est que cette solution ferme "brutalement" les connexions.
    sur le principe je peux constater que des connexions sont libérée sur mon serveur après avoir exécuter la commande mais les personnes ne peuvent plus se reconnecter aux bases de données depuis le client open erp car désormais un message affiche que la connexion à brutalement été fermée.

    je retourne donc quasiment à zéro car je suis obligé de redémarrer le serveur ou le service web openerp pour effacer le message d'erreur et retrouver un fonctionnement normal.

    je commence à désespérer

Discussions similaires

  1. [JDBC] [PostgreSQL] Insert d'un serial
    Par e1lauren dans le forum JDBC
    Réponses: 3
    Dernier message: 16/05/2006, 15h57
  2. [ADO] [PostGreSql] Problème de connexion
    Par charliejo dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/03/2006, 09h36
  3. Réponses: 2
    Dernier message: 31/10/2005, 14h29
  4. JBuilder 8 et JDBC/PostgreSQL
    Par nicox dans le forum JBuilder
    Réponses: 2
    Dernier message: 14/05/2003, 15h43
  5. [PostgreSQL]probleme de connexion par pgaccess
    Par yacomor dans le forum Administration
    Réponses: 9
    Dernier message: 14/11/2002, 16h15

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