[ 
https://issues.apache.org/jira/browse/DBCP-582?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17434562#comment-17434562
 ] 

Gary D. Gregory commented on DBCP-582:
--------------------------------------

[~BeateSchatzmann]

Feel free to provide a PR on GitHub so we can all see what this would look 
like. 

Are all the SQL states you mention part of any of the SQL standards like 
SQL-92? Either way, these would have to be documented in code comments so we 
know what they each mean. Or maybe they would need to be configured from a 
properties file or somesuch.

> Check SQLExceptions in org.apache.commons.dbcp2.cpdsadapter.ConnectionImpl
> --------------------------------------------------------------------------
>
>                 Key: DBCP-582
>                 URL: https://issues.apache.org/jira/browse/DBCP-582
>             Project: Commons DBCP
>          Issue Type: New Feature
>            Reporter: Beate Schatzmann
>            Priority: Minor
>
> I use _*org.apache.commons.dbcp2.cpdsadapter.DriverAdapterCPDS*_ to connect 
> to a postgres database in the connection pool 
> _*org.apache.commons.dbcp2.datasources.SharedPoolDataSource*_. I am quite 
> happy with it but there is one thing that postgres' ConnectionPoolDataSource 
> does better: when the Connection is used and an SQLException occurs then it 
> is checked if the Exception is "fatal" - and if this is the case then
> {{javax.sql.ConnectionEventListener.connectionErrorOccurred()}}
> is called, which is handled in 
> _*org.apache.commons.dbcp2.datasources.KeyedCPDSConnectionFactory*_ and 
> removes the Connection from the pool (i.e. the number of active connections 
> is decremented).
> With _*DriverAdapterCPDS*_ I have no choice but to configure that quite often 
> a query will be sent to the database to check if the connection is valid.
> In _*org.apache.commons.dbcp2.cpdsadapter.ConnectionImpl*_ everything is 
> prepared: SQLExceptions in each method lead to a call to 
> _*handleException()*_. Unluckily ConnectionImpl does not implement this 
> method (and the parent class 
> _*org.apache.commons.dbcp2.DelegatingConnection*_ does not do anything but 
> throw the SQLException).
> The connection pool that is implemented by _*HikariCP*_ checks the 
> SQLExceptions; "fatal" Exceptions are:
> SQLException.getSQLState() starting with
> _*08*_
> or returning one of
> _*0A000*_
> _*57P01*_
> _*57P02*_
> _*57P03*_
> _*01002*_
> _*JZ0C0*_
> _*JZ0C1*_
> SQLException.getErrorCode() returning one of
> _*500150*_
> _*2399*_
> and _*SQLTimeoutException*_. (Moreover HikariCP calls 
> SQLException.getNextException() for up to 10 times and checks again.)
> Postgres (pgjdbc's _*org.postgresql.ds.PGPooledConnection*_ and also 
> pgjdbc-ng's _*com.impossibl.postgres.jdbc.PGPooledConnection*_) fatal 
> SQLExceptions are the ones where getSQLState() starts with
> _*08*_
> _*53*_
> _*58*_
> _*60*_
> _*99*_
> _*F0*_
> _*XX*_
> or getSQLState() is equal to
> _*57P01*_
> _*57P02*_
> _*57P03*_
> I would be happy with something like HikariCP's solution but it would be 
> really fantastic if I could specify the check method.
>  
> Die Lösung von HikariCP würde mir schon reichen, aber ganz besonders toll 
> wäre natürlich, wenn man eine Prüfmethode für fatale SQLExceptions angeben 
> könnte.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to