dev@glassfish.java.net

Re: BUG? Validation of database connection (Connection pooling)

From: Andy Knight <Andy.Knight_at_Sun.COM>
Date: Tue, 19 Jan 2010 10:23:11 +0000

I am aware of the Connection Pool validation mechanism. That doesn't help me.

I need to deal with this at the JDBC level. If I get an exception whilst carrying out any activity on the database in my application, I need a generic solution for determining whether the connection is still valid. If I know what type of database I'm connecting to, then I can take action accordingly (e.g. for Oracle "SELECT * FROM DUAL;").

What we really need to understand is why java.lang.AbstractMethodError is being raised and, of course, find a solution.

         Andy Knight
Principal Engineer,
Sun Microsystems, Inc.
Java House, Guillemont Park, Minley Road,
Camberley, Surrey GU17 9QG United Kingdom
Home office: +44 1494 462438
Mobile: +44 7775 583415
Skype: aprknight
Email: Andy.Knight_at_Sun.COM
Blog: http://blogs.sun.com/andky

On 19 Jan 2010, at 07:46, Shalini Muthukrishnan wrote:

> Hi Andy,
>
> You could enable the Connection Validation for the JDBC Connection pool that is used. There are different validation mechanisms and when "table" is used as the validation method, a table name could be set to perform the connection validation.
>
> Please refer http://blogs.sun.com/JagadishPrasath/entry/connection_validation_in_glassfish_jdbc for more details on the same.
>
> Thanks,
> Shalini.
>
> Andy Knight wrote:
>> As far as I know (and please tell me if there's another way) the correct generic mechanism for testing the validity of a database connection is to use the /isValid() / method of /java.sql.Connection/
>> /
>> /
>> In this example, the underlying DB is Oracle and, of course, one could invoke "SELECT * FROM DUAL;" to test the connection. In fact, I believe that's what the GlassFish Connection Pool does by default for Oracle. However, in principle, I don't know that it's Oracle and so I need a generic technique.
>>
>> /If I acquire a connection from the GlassFish v2.1 Connection Pool and invoke /isValid()/, a rather unpleasant Exception occurs. Here's a Java code fragment that demonstrates the problem.../
>>
>> *Connection c = ((DataSource) new InitialContext().lookup("jdbc/myOracle")).getConnection();*
>> *c.isValid(10);*
>> /
>>
>> ...and here's the Exception...
>>
>> Caused by: java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.isValid(I)Z
>> at com.sun.gjc.spi.jdbc40.ConnectionHolder40.isValid(ConnectionHolder40.java:196)
>> at com.sun.fast.OracleBean.ConnectAndValidate(OracleBean.java:20)
>>
>> The class com.sun.gjc.spi.jdbc40.ConnectionHolder40 is obviously a subclass of java.sql.Connection and is, in fact, the type returned by *getConnection()*.
>>
>> According to the Javadocs for AbstractMethodError...
>>
>> Thrown when an application tries to call an abstract method. Normally, this error is caught by the compiler; this error can only occur at run time if the definition of some class has incompatibly changed since the currently executing method was last compiled.
>>
>> How can I work around this?
>>
>> /
>> <http://www.sun.com> Andy Knight
>> Principal Engineer,
>> Sun Microsystems, Inc.
>> Java House, Guillemont Park, Minley Road,
>> Camberley, Surrey GU17 9QG United Kingdom
>> Home office: +44 1494 462438
>> Mobile: +44 7775 583415
>> Skype: aprknight
>> Email: Andy.Knight_at_Sun.COM <mailto:Andy.Knight_at_Sun.COM>
>> Blog: http://blogs.sun.com/andky
>> <http://www.sun.com>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>