Re: Unregistering the driver from DriverManager

From: Dave Cramer <pg(at)fastcrypt(dot)com>
To: Christopher BROWN <brown(at)reflexe(dot)fr>
Cc: List <pgsql-jdbc(at)postgresql(dot)org>
Subject: Re: Unregistering the driver from DriverManager
Date: 2014-12-29 11:48:30
Message-ID: CADK3HHKKaZtxOVyY1uj9MHBnMw9Sr-==ZLaT3em+L8F6iY6Urw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

I have no objection to an unregister static method being added. It's not in
the API so it would not effect anything really

Dave Cramer

dave.cramer(at)credativ(dot)ca
http://www.credativ.ca

On 29 December 2014 at 04:53, Christopher BROWN <brown(at)reflexe(dot)fr> wrote:

> Hello,
>
> I'm starting to integrate the Postgresql JDBC driver into an OSGi
> environment, as an OSGi bundle. I'm evaluating the different ways to avoid
> a classloader leak with DriverManager when hot-swapping the driver bundle
> without restarting the host application, and am seeking suggestions on best
> practice regarding the Postgresql JDBC driver.
>
> Another bundle (which I provide, it's not third-party) will directly
> depend upon it (loading classes directly, namely org.postgresql.Driver);
> when the Postgresql JDBC driver classes are loaded, the other bundle will
> create a DataSource using a JDBC connection pool, and register the
> DataSource as an OSGi service. Normally, that's all that will happen
> during the application lifecycle, but in principle, it's possible for the
> administrator to want to replace say the 9.3 driver with the 9.4 driver by
> removing the 9.3 ".jar" at runtime, and replacing it with the 9.4 ".jar",
> all at runtime; when the first ".jar" is deleted, the dependent bundle is
> knocked offline, unregistering the DataSource automatically, and notifying
> all clients; when the second is installed, the application is once again
> fully-functional (and all this normally occurs within a few hundred
> milliseconds).
>
> Looking at the source code, I can see that the org.postgresql.Driver class
> registers itself in a "static" block with DriverManager (which is the
> correct behavior regarding the JDBC spec). However, short of a brute-force
> loop -- like this one: http://stackoverflow.com/a/5315467 (enhanced to
> check the class name of each driver, to avoid clobbering unrelated driver
> registrations) -- is there any other approach possible or that could be
> added, say a NonRegisteringDriver (superclass of Driver, with all logic
> except for the static initializer) or an "unregister()" static method, or a
> field containing the registered Driver instance?
>
> Thanks,
> Christopher
>
>

In response to

Responses

Browse pgsql-jdbc by date

  From Date Subject
Next Message Alexis Meneses 2014-12-29 12:45:55 Re: Unregistering the driver from DriverManager
Previous Message Dave Cramer 2014-12-29 11:42:34 Re: Postgresql 9.4 / JSONB / JDBC