web-dev-qa-db-fra.com

org.postgresql.util.PSQLException: la tentative de connexion a échoué

Je me connecte à la base de données postgres en utilisant Java services Web (axe Apache) avec JDBC connexions pour obtenir les données. Mais soudainement, la plupart du temps, je reçois une exception de org.postgresql.util.PSQLException: The connection attempt failed. et parfois ça marche bien. Ici, j'utilise de nombreuses déclarations préparées. Mon exemple de code est

Connection connection=null;
try
{
    Class.forName(driver);
    connection = DriverManager.getConnection(url, username, password);
    ps1=connection.prepareStatement("select * from emp");
    rs1=ps1.executeQuery();
    while(rs1.next())
    {            
        ps2=connection.prepareStatement("select * from dept where dept_no="+rs1.getInt("dept_no"));
        rs2=ps2.executeQuery();
        while(rs2.next())
        {
            ................
            ................
        }
    }
}
catch(Exception e)
{
    System.out.println("Exception occurred is"+e.getMessage());            
}
finally
{
    try{if(rs1!=null)rs1.close();}catch(Exception e){ System.out.println("*1closing error--->"+e);}
    try{if(ps1!=null)ps1.close();}catch(Exception e){ System.out.println("**1closing error--->"+e);}
    try{if(rs2!=null)rs2.close();}catch(Exception e){ System.out.println("*2closing error--->"+e);}
    try{if(ps2!=null)ps2.close();}catch(Exception e){ System.out.println("**2closing error--->"+e);}
    try{if(connection!=null)connection.close();}catch(Exception e){ System.out.println("***closing error--->"+e);}
}

trace de pile sur cette exception est

org.postgresql.util.PSQLException: The connection attempt failed.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.Java:137)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.Java:66)
    at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.Java:124)
    at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.Java:30)
    at org.postgresql.jdbc3.Jdbc3Connection.<init>(Jdbc3Connection.Java:24)
    at org.postgresql.Driver.makeConnection(Driver.Java:386)
    at org.postgresql.Driver.connect(Driver.Java:260)
    at Java.sql.DriverManager.getConnection(Unknown Source)
    at Java.sql.DriverManager.getConnection(Unknown Source)
    at com.codon.service.WareHouseServer.get_picks(WareHouseServer.Java:7415)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at Java.lang.reflect.Method.invoke(Unknown Source)
    at org.Apache.axis.providers.Java.RPCProvider.invokeMethod(RPCProvider.Java:397)
    at org.Apache.axis.providers.Java.RPCProvider.processMessage(RPCProvider.Java:186)
    at org.Apache.axis.providers.Java.JavaProvider.invoke(JavaProvider.Java:323)
    at org.Apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.Java:32)
    at org.Apache.axis.SimpleChain.doVisiting(SimpleChain.Java:118)
    at org.Apache.axis.SimpleChain.invoke(SimpleChain.Java:83)
    at org.Apache.axis.handlers.soap.SOAPService.invoke(SOAPService.Java:454)
    at org.Apache.axis.server.AxisServer.invoke(AxisServer.Java:281)
    at org.Apache.axis.transport.http.AxisServlet.doPost(AxisServlet.Java:699)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:637)
    at org.Apache.axis.transport.http.AxisServletBase.service(AxisServletBase.Java:327)
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:717)
    at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:290)
    at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:206)
    at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:233)
    at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:191)
    at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:127)
    at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:102)
    at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:109)
    at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:298)
    at org.Apache.coyote.http11.Http11Processor.process(Http11Processor.Java:857)
    at org.Apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.Java:588)
    at org.Apache.Tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.Java:489)
    at Java.lang.Thread.run(Unknown Source)
Caused by: Java.net.SocketException: Connection reset
    at Java.net.SocketInputStream.read(Unknown Source)
    at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.Java:135)
    at org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.Java:104)
    at org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.Java:73)
    at org.postgresql.core.PGStream.ReceiveChar(PGStream.Java:259)
    at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.Java:254)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.Java:95)
    ... 37 more

J'ai vérifié les journaux postgres et j'ai trouvé les déclarations suivantes dans différents cas

1.AVERTISSEMENT: le travailleur a mis trop de temps à démarrer; annulé.

2. ne peut pas se reconnecter à la mémoire partagée (clé = ...., addr = .....): 487.

3. ne peut pas recevoir de données du client: aucune connexion n'a pu être établie car la machine cible l'a refusée activement.

4. inattendu EOF sur la connexion client.

s'il vous plaît aidez-moi.Merci à l'avance

14
Sasi Vara Prasad

Le vrai problème est:

Caused by: Java.net.SocketException: Connection reset
    at Java.net.SocketInputStream.read

La connexion a été fermée lorsque Java a tenté de la lire. Cela peut être dû à:

  • Redémarrage du serveur PostgreSQL
  • Le backend PostgreSQL auquel vous étiez connecté a été interrompu
  • Le backend PostgreSQL auquel vous étiez connecté pour planter
  • Connexion réseau douteuse
  • Pare-feu avec état mal comportés
  • Connexions inactives expirant des tables de connexion NAT de NAT

... et probablement plus. Vérifiez les journaux du serveur PostgreSQL pour voir s'il y a quelque chose d'information là-dedans; pensez également à effectuer un traçage réseau avec un outil tel que Wireshark.

10
Craig Ringer