Thread: Pg JDBC 3 driver, JDK 1.6, Glassfish v2 incompatability

Pg JDBC 3 driver, JDK 1.6, Glassfish v2 incompatability

From
Thor-Michael Støre
Date:

Hello,

 

Could some dev take a look at the following bug in the Glassfish Applicationserver, and either clear the JDBC PostgreSQL driver of any wrongdoing, or fix any problem that may be present in the driver? It’s really no big deal since I have no problem working around it, but even just getting a comment on it would put one of my worries at rest.

 

https://glassfish.dev.java.net/issues/show_bug.cgi?id=2779

 

The relevant part of it is:

CAUSE:
On further investigation, Postgres jdbc driver's Connection from
ConnectionPoolDataSource/XADataSource is a proxy of java.sql.Connection, 
This proxy, in jdk 1.6 will list all methods of jdbc 4.0 connection (even though
the datasource is only jdbc 30)
This makes GlassFish to decide (during initialization of datasource) that it is
a jdbc 4.0 compatible connection and calls jdbc 4.0 methods of Connection,
causing AbstractMethodError thrown.

 

Thanks,

Thor Michael Støre

 

Re: Pg JDBC 3 driver, JDK 1.6, Glassfish v2 incompatability

From
Kris Jurka
Date:

On Mon, 9 Apr 2007, Thor-Michael St�re wrote:

> CAUSE: On further investigation, Postgres jdbc driver's Connection from
> ConnectionPoolDataSource/XADataSource is a proxy of java.sql.Connection,
> This proxy, in jdk 1.6 will list all methods of jdbc 4.0 connection
> (even though the datasource is only jdbc 30) This makes GlassFish to
> decide (during initialization of datasource) that it is a jdbc 4.0
> compatible connection and calls jdbc 4.0 methods of Connection, causing
> AbstractMethodError thrown.
>

The real problem is that you are using the JDBC3 instead of JDBC4 driver
with a 1.6 JVM.  I don't believe that either PG or Glassfish are at fault.
When the JDBC3 driver was built (under a 1.4/1.5) JDK it does implement
all java.sql.Connection methods so it is fine to proxy for it.  When run
under a 1.6 JVM the proxying suddenly claims to implement more methods
which Glassfish reasonably tries to use.  So I think it's really a
configuration error on your part.

Kris Jurka