Re: Totally weird behaviour in org.postgresql.Driver

From: Peter
Subject: Re: Totally weird behaviour in org.postgresql.Driver
Date: ,
Msg-id: 002201c9a2f9$edd47510$c97d5f30$@com
(view: Whole thread, Raw)
In response to: Re: Totally weird behaviour in org.postgresql.Driver  (Kris Jurka)
Responses: Re: Totally weird behaviour in org.postgresql.Driver  (Dave Cramer)
List: pgsql-jdbc

Tree view

Totally weird behaviour in org.postgresql.Driver  ("Peter", )
 Re: Totally weird behaviour in org.postgresql.Driver  (Oliver Jowett, )
 Re: Totally weird behaviour in org.postgresql.Driver  ("Peter", )
  Re: Totally weird behaviour in org.postgresql.Driver  (Kris Jurka, )
   Re: Totally weird behaviour in org.postgresql.Driver  ("Peter", )
    Re: Totally weird behaviour in org.postgresql.Driver  (Dave Cramer, )
     Re: Totally weird behaviour in org.postgresql.Driver  ("Peter", )
      Re: Totally weird behaviour in org.postgresql.Driver  (Craig Servin, )
 Re: Totally weird behaviour in org.postgresql.Driver  ("Peter", )
 Re: Totally weird behaviour in org.postgresql.Driver  ("Peter", )
  Re: Totally weird behaviour in org.postgresql.Driver  (Dave Cramer, )
   Re: Totally weird behaviour in org.postgresql.Driver  (peter, )
    Re: Totally weird behaviour in org.postgresql.Driver  (Oliver Jowett, )
    Re: Totally weird behaviour in org.postgresql.Driver  (Guy Rouillier, )
     Re: Totally weird behaviour in org.postgresql.Driver  (Dave Cramer, )
 Re: Totally weird behaviour in org.postgresql.Driver  ("Peter", )
 Re: Totally weird behaviour in org.postgresql.Driver  ("Peter", )
  Re: Totally weird behaviour in org.postgresql.Driver  (Oliver Jowett, )
  Re: Totally weird behaviour in org.postgresql.Driver  (Віталій Тимчишин, )
   Re: Totally weird behaviour in org.postgresql.Driver  (Hannu Krosing, )
  Re: Totally weird behaviour in org.postgresql.Driver  (Guy Rouillier, )
 Re: Totally weird behaviour in org.postgresql.Driver  ("Peter", )

>> I added a bunch more synchronized (mutex) blocks in my code to avoid
>> getConnection being called simultaneously from multiple threads (why
>> isnt that method synchronized anyway?) - so far so good... keeping
>> fingers crossed. Maybe should have just subclassed PGSimpleDataSource...

>I'm not sure why it needs to be synchronized.  The attached test case (20
threads each opening and closing >connections as fast as possible) doesn't
show any problems for me.  Does it fail for you?  Is there a >particular
change that fixes it for you?

I'm not sure if it needs to be synchronized either. Most likely I'm running
into a JVM bug in my particular environment (Tomcat servlet). I adapted your
test case to run inside a servlet and it does not produce any errors.

In my app I'm using singleton class instance to handle all database
connections, sample code below. If I remove synchronized (dbManager.class)
blocks the bug is back with a vengeance...

final public class dbManager {


    private static PGSimpleDataSource _ds;
    // Our global instance
    private static dbManager _dbManager = null;

    /**

     * Attempts to create a valid PG DataSource
     *
     * @return a boolean representing whether the DS was successfully
created
     */
    private synchronized static boolean createDataSource() {
        try {
            synchronized (dbManager.class) {

                _ds = new PGSimpleDataSource();
                _ds.setServerName("myserver");
                _ds.setDatabaseName("mydb");
                _ds.setPortNumber(5432);

            }

            return true;
        } catch (Exception ex) {
            Logger.getLogger(dbManager.class.getName()).log(Level.SEVERE,
null, ex);
            return false;
        }
    }

    public synchronized static dbManager getInstance(String connString) {
        if ( _dbManager == null ) {
            if ( createDataSource() ) {
                _dbManager = new dbManager();
            }
        }

        return _dbManager;
    }

    /**
     *
     * @return returns a connection created w/ default initial credentials
and very little access rights
     */
    public synchronized Connection getInitialConnection() throws
SQLException {
        synchronized (dbManager.class) {
            return _ds.getConnection("inituser", "initpass");
        }
    }

    /**
     *
     * @param dbUser
     * @param dbPass
     * @return a connection if it can be created, null otherwise
     */
    public synchronized Connection getNewUserConnection(String dbUser,
String dbPass){
        try {

            synchronized (dbManager.class) {

                Connection userConn = _ds.getConnection(dbUser,
dbPass);
            return userConn;

            }

        } catch (Exception ex) {

Logger.getLogger(dbManager.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }
}



pgsql-jdbc by date:

From: "Peter"
Date:
Subject: Re: Totally weird behaviour in org.postgresql.Driver
From: Craig Servin
Date:
Subject: Re: Totally weird behaviour in org.postgresql.Driver