Skip site navigation (1) Skip section navigation (2)

Re: Totally weird behaviour in org.postgresql.Driver

From: Dave Cramer <pg(at)fastcrypt(dot)com>
To: Peter <peter(at)greatnowhere(dot)com>
Cc: Kris Jurka <books(at)ejurka(dot)com>, pgsql-jdbc(at)postgresql(dot)org
Subject: Re: Totally weird behaviour in org.postgresql.Driver
Date: 2009-03-12 10:42:46
Message-ID: 491f66a50903120342j67e87c7dob10cfdc23580c8f4@mail.gmail.com (view raw or flat)
Thread:
Lists: pgsql-jdbc
Peter,

Couple things.... do you really need to synchronize twice in every method
???
Have you looked at dbcp or c3po instead of re-inventing the wheel ?

Can you supply us with a test case which does exhibit the bug ?

On Thu, Mar 12, 2009 at 6:04 AM, Peter <peter(at)greatnowhere(dot)com> wrote:

> >> 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;
>                 }
>    }
> }
>
>
> --
> Sent via pgsql-jdbc mailing list (pgsql-jdbc(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-jdbc
>

In response to

Responses

pgsql-jdbc by date

Next:From: Tom LaneDate: 2009-03-12 12:25:13
Subject: Re: Renaming sequence auto generated by SERIAL type don't update pg_attrdef
Previous:From: PeterDate: 2009-03-12 10:04:27
Subject: Re: Totally weird behaviour in org.postgresql.Driver

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group