Re: Connection.isValid(int timeout) implementation

From: Vlad Arkhipov <arhipov(at)dc(dot)baikal(dot)ru>
To: Craig Ringer <ringerc(at)ringerc(dot)id(dot)au>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: Connection.isValid(int timeout) implementation
Date: 2012-06-09 08:09:19
Message-ID: 4FD304AF.30707@dc.baikal.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

On 06/09/2012 03:19 PM, Craig Ringer wrote:
> On 06/09/2012 10:28 AM, Vlad Arkhipov wrote:
>> However there are some projects that strongly rely on this method to
>> test the connection (for example Arjuna Transaction Manager that is
>> used by JBoss Application Server). Are there any plans of
>> implementing this feature?
>>> Really? JBoss AS 7.1.1.Final is quite happy with PgJDBC
>>> (postgresql-9.1-901-1.jdbc4.jar) here. What's your configuration?
>>> Your -ds.xml or jboss-cli "create datasource" command?
>> They have a memory leak in JTS 4.16.4 (JBoss AS 7.1.1), so if you use
>> XA datasource and the driver does not implement Connection.isValid,
>> Transaction Manager will create and store in memory a new XA
>> connection every 2 minutes.
>
> Good to know. Please post the reference to the JBoss JIRA ticket -
> assuming, as it sounds like, you're referring to an acknowledged bug.
>
> It sounds like it'll be important to make sure that isValid() makes it
> into the 9.2 JDBC driver release.
https://issues.jboss.org/browse/JBTM-1183
> Re your -ds.xml, does setting an explicit connection validator help?
>
> <validation>
> <valid-connection-checker
> class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"></valid-connection-checker>
> <exception-sorter
> class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"></exception-sorter>
> </validation>
>
>
> Otherwise I think it'll use
> org.jboss.jca.adapters.jdbc.extensions.novendor.JDBC4ValidConnectionChecker,
> which I expect won't work without isValid().
Yes, I have these lines in the datasource description. However the
recovery subsystem does not use them.
I debugged a bit more and found out that it's also necessary to specify
the recovery plugin.

<recovery no-recovery="false">
<recovery-plugin
class-name="org.jboss.jca.core.recovery.ValidatingManagedConnectionFactoryRecoveryPlugin"
/>
</recovery>

In response to

Browse pgsql-jdbc by date

  From Date Subject
Next Message wbrana 2012-06-09 11:25:42 An I/O error occured while sending to the backend
Previous Message Craig Ringer 2012-06-09 06:19:22 Re: Connection.isValid(int timeout) implementation