I'm seeing what appears to be closed connections being reused for a short 
time period.  It looks like the only way these connections are removed from 
the connection pool is when the validator runs.  Is there a configurable 
way to change this? As of now I've created a class that extends 
DefaultExecuteListener and manually discards the connections on specific 
errros.

Example error: (repeats with different queries many times before the 
connection is killed)
....user`.`login` WHERE `session`.`id` = ?]; No operations allowed after 
connection closed.
....
at org.jooq_3.9.1.MYSQL.debug(Unknown Source) ... Caused by: com.mysql.jdbc.
exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed 
after connection closed. ... Caused by: com.mysql.jdbc.exceptions.jdbc4.
CommunicationsException: Communications link failure The last packet 
successfully received from the server was 11,618 milliseconds ago. The last 
packet sent successfully to the server was 5,005 milliseconds ago. ... 1 
common frames omitted Caused by: java.net.SocketTimeoutException: Read timed 
out ... 28 common frames omitted



Here's my ExcuteListener that I'm using to detect one of these errors and 
discard the connection.

ConnectionListener extends DefaultExecuteListener {

...


    public ConnectionListener() {}

    @Override
    public void exception(ExecuteContext ctx) {
        try {
            if (ctx != null && ctx.exception() != null) {
                //Proceed to check if we recieved a DataAccessException
                if (ctx.exception() instanceof DataAccessException) {
                    DataAccessException exception = (DataAccessException) 
ctx.exception();

                    //If the error is network related discard the connection
                    if (isNetworkError(exception)) {
                        //The underlying ProxyConnection which we need to call  
setDiscarded is a few levels deep
                        Connection conn = ctx.connection();
                        DefaultConnection dConn = (DefaultConnection) conn;
                        SettingsEnabledConnection sConn = 
(SettingsEnabledConnection) dConn;
                        ProviderEnabledConnection pConn = 
(ProviderEnabledConnection) sConn.getDelegate();

                        //Get the Proxy connection handler
                        InvocationHandler handler = 
Proxy.getInvocationHandler(pConn.getDelegate());

                        //Get the Proxy connection
                        ProxyConnection proxyConnection = (ProxyConnection)
                                ((DisposableConnectionFacade) 
handler).getNext();

                        //Discard the connection
                        proxyConnection.getConnection().setDiscarded(true);
                    }
                }
            }
        } catch (Exception e) {
            logger.error("ConnectionListener caught unexpected error", e);
        }
    }

-- 
You received this message because you are subscribed to the Google Groups "jOOQ 
User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to