Re: please help: PostgreSQL JDBC Pooling problem - Mailing list pgsql-jdbc

From Barry Lind
Subject Re: please help: PostgreSQL JDBC Pooling problem
Date
Msg-id 3E7FB997.2060406@xythos.com
Whole thread Raw
In response to please help: PostgreSQL JDBC Pooling problem  ("Marcus Andree S. Magalhaes" <marcus.magalhaes@vlinfo.com.br>)
Responses Re: please help: PostgreSQL JDBC Pooling problem
List pgsql-jdbc
Marcus,

I can't reproduce your problem.  When I run the modifed version of your
test (changes made so that it compiles and runs standalone) I don't have
any errors.  My test table has about 1000 rows in it and everything
works fine without any errors.

I am running the latest 7.3 build (109) against a 7.3.2 database using
the sun 1.4.1_01 jdk on Redhat8.

Is there something else I need to do to reproduce the problem?

thanks,
--Barry

Marcus Andree S. Magalhaes wrote:
> Dear list,
>
>
> I'm having a couple problems while implementing a JDBC Connection pool using
> Postgresql Jdbc3PoolingDataSource.
>
> I was able to reproduce the errors with a simple java program. I'll be
> grateful if someone could analyse this problem for a while...
>
> The class io_property is a local class using standard java Properties
> classes to load data from a simple text file. This is done when calling
> the io_property.startService() static method.
>
> If I run the program exactly as show below, it works wonderfully. However,
> when commenting the return line of openConnection and uncommenting the
> previous 3 lines as:
>
>         this.loConnection = loPoolSource.getConnection();
>         System.out.println("loConnection = " + this.loConnection);
>         loStatement = this.loConnection.createStatement();
>         System.out.println("Statement = " + loStatement);
>         return loStatement;
>         // return this.loConnection.createStatement();
>
> The JDBC Statement returned is null. That's the problem I'm facing with my
> main application...
>
> Why is this happening?? In which circumstances
> does Connection.createStatement() return null???
>
>
> My main application is a bit different... It uses threads and lots of SQL
> code. I have to return a Statement instead of a Connection for historical
> reasons...
>
>
> Any help is welcome. The source file follows...
>
>
> Marcus
>
> ===============================================================================
>
> public class con_database {
>
>     static Jdbc3PoolingDataSource loPoolSource = null;
>     private Connection loConnection = null;
>
>     con_database() {
>     io_property.startService();
>     }
>
>     private static void setPool() {
>     // DataSource initialization
>     System.out.println("setPool()");
>     try {
>         System.out.println("setting pool");
>         // constructs a pool only when loPoolSource is not assigned.
>         // this will prevent problems if the same pool is set more than
>         // one time
>         if (loPoolSource == null) {
>         loPoolSource = new Jdbc3PoolingDataSource();
>         // DataSource configuration.
>         loPoolSource.setDataSourceName(io_property.DATABASE_POOL_DATA_SOURCE_NAME); //
> any name is valid here
>         loPoolSource.setServerName(io_property.DATABASE_POOL_SERVER_NAME);
>         loPoolSource.setPortNumber(io_property.DATABASE_POOL_SERVER_PORT);
>         loPoolSource.setDatabaseName(io_property.DATABASE_POOL_DATABASE_NAME);
>         loPoolSource.setUser(io_property.DATABASE_POOL_USER_NAME);
>         loPoolSource.setPassword(io_property.DATABASE_POOL_PASSWORD);
>         loPoolSource.setMaxConnections(io_property.DATABASE_POOL_MAXCONNECTIONS);
>
>         } else {
>         System.out.println("pool is set");
>         return;
>         }
>     } catch (Exception loException) {
>         // logger.logToFile(loException);
>         loException.printStackTrace();
>     }
>
>     }
>
>
>
>     public Statement openConnection() {
>     Statement loStatement;
>     System.out.println("opening  con");
>     try {
>         // gets a connection from Pool
>         this.loConnection = loPoolSource.getConnection();
>         System.out.println("loConnection = " + this.loConnection);
>         // loStatement = this.loConnection.createStatement();
>         // System.out.println("Statement = " + loStatement);
>         // return loStatement;
>         return this.loConnection.createStatement();
>
>     } catch (Exception loException) {
>         loException.printStackTrace();
>     }
>
>     return null;
>     }
>
>     public void closeConnection() {
>     System.out.println("closing  con");
>     try {
>         if (this.loConnection != null) this.loConnection.close();
>     } catch (Exception loException) {
>         loException.printStackTrace();
>     }
>     }
>
>
>     public static void main(String args[]) {
>
>     Statement loStatement = null;
>     con_database loPoolConnection = new con_database();
>     loPoolConnection.setPool();
>     loStatement = loPoolConnection.openConnection();
>     ResultSet lors = null;
>     try {
>         lors = loStatement.executeQuery("select * from <tablename>");
>         while (lors.next()) {
>         System.out.println(lors.getString(1));
>         }
>     } catch (Exception e) {
>         e.printStackTrace();
>     }
>     finally {
>         try {
>         lors.close();
>         loStatement.close();
>         loPoolConnection.closeConnection();
>         } catch (Exception loException) {
>         loException.printStackTrace();
>         }
>     }
>
>     loPoolConnection = new con_database();
>     loPoolConnection.setPool();
>     loStatement = null;
>     loStatement = loPoolConnection.openConnection();
>     lors = null;
>     try {
>         lors = loStatement.executeQuery("select * from <table_name>");
>         while (lors.next()) {
>         System.out.println(lors.getString(2));
>         }
>     } catch (Exception e) {
>         e.printStackTrace();
>     }
>     finally {
>         try {
>         lors.close();
>         loStatement.close();
>         loPoolConnection.closeConnection();
>         } catch (Exception loException) {
>         loException.printStackTrace();
>         }
>     }
>      }
>    }
>
>
>
>
>
>
>
>
> -------------------------------
>    http://www.vlinfo.com.br
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/docs/faqs/FAQ.html
>
import org.postgresql.jdbc3.Jdbc3PoolingDataSource;
import java.sql.*;

public class test29 {

    static Jdbc3PoolingDataSource loPoolSource = null;
    private Connection loConnection = null;
    private static final String DATABASE_POOL_DATA_SOURCE_NAME = "test";
    private static final String DATABASE_POOL_SERVER_NAME = "localhost";
    private static final int DATABASE_POOL_SERVER_PORT = 5432;
    private static final String DATABASE_POOL_DATABASE_NAME = "test";
    private static final String DATABASE_POOL_USER_NAME = "test";
    private static final String DATABASE_POOL_PASSWORD = "test";
    private static final int DATABASE_POOL_MAXCONNECTIONS = 30;


    test29() {
    }

    private static void setPool() {
    // DataSource initialization
    System.out.println("setPool()");
    try {
        System.out.println("setting pool");
        // constructs a pool only when loPoolSource is not assigned.
        // this will prevent problems if the same pool is set more than
        // one time
        if (loPoolSource == null) {
        loPoolSource = new Jdbc3PoolingDataSource();
        // DataSource configuration.
        loPoolSource.setDataSourceName(DATABASE_POOL_DATA_SOURCE_NAME); // any name is valid here
        loPoolSource.setServerName(DATABASE_POOL_SERVER_NAME);
        loPoolSource.setPortNumber(DATABASE_POOL_SERVER_PORT);
        loPoolSource.setDatabaseName(DATABASE_POOL_DATABASE_NAME);
        loPoolSource.setUser(DATABASE_POOL_USER_NAME);
        loPoolSource.setPassword(DATABASE_POOL_PASSWORD);
        loPoolSource.setMaxConnections(DATABASE_POOL_MAXCONNECTIONS);

        } else {
        System.out.println("pool is set");
        return;
        }
    } catch (Exception loException) {
        // logger.logToFile(loException);
        loException.printStackTrace();
    }

    }



    public Statement openConnection() {
    Statement loStatement;
    System.out.println("opening  con");
    try {
        // gets a connection from Pool
        this.loConnection = loPoolSource.getConnection();
        System.out.println("loConnection = " + this.loConnection);
        // loStatement = this.loConnection.createStatement();
        // System.out.println("Statement = " + loStatement);
        // return loStatement;
        return this.loConnection.createStatement();

    } catch (Exception loException) {
        loException.printStackTrace();
    }

    return null;
    }

    public void closeConnection() {
    System.out.println("closing  con");
    try {
        if (this.loConnection != null) this.loConnection.close();
    } catch (Exception loException) {
        loException.printStackTrace();
    }
    }


    public static void main(String args[]) {

    Statement loStatement = null;
    test29 loPoolConnection = new test29();
    loPoolConnection.setPool();
    loStatement = loPoolConnection.openConnection();
    ResultSet lors = null;
    try {
        lors = loStatement.executeQuery("select * from test");
        while (lors.next()) {
        System.out.println(lors.getString(1));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        try {
        lors.close();
        loStatement.close();
        loPoolConnection.closeConnection();
        } catch (Exception loException) {
        loException.printStackTrace();
        }
    }

    loPoolConnection = new test29();
    loPoolConnection.setPool();
    loStatement = null;
    loStatement = loPoolConnection.openConnection();
    lors = null;
    try {
        lors = loStatement.executeQuery("select * from test");
        while (lors.next()) {
        System.out.println(lors.getString(2));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        try {
        lors.close();
        loStatement.close();
        loPoolConnection.closeConnection();
        } catch (Exception loException) {
        loException.printStackTrace();
        }
    }
     }
   }









pgsql-jdbc by date:

Previous
From: Barry Lind
Date:
Subject: Re: updateRow bug fix (possible) and build questions
Next
From: "Marcus Andree S. Magalhaes"
Date:
Subject: Re: please help: PostgreSQL JDBC Pooling problem