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
Views: Raw Message | Whole Thread | Download mbox | Resend email
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

Browse pgsql-jdbc by date

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