WebApp (Tomcat-jdbc) Excepción de abandono de lanzamiento de conexión de base de datos agrupada

He estado navegando SO durante algún tiempo y masticando mi sombrero en el proceso, pero no puedo encontrar una coincidencia exacta con mi problema.
En resumen, estoy obteniendo un excelente seguimiento de pila (org.apache.tomcat.jdbc.pool.ConnectionPool) después de 60 segundos de inactividad, que es un comportamiento normal para un par de subprocesos del lado del servidor.
Estoy usando la agrupación de conexiones JDBC de Tomcat (org.apache.tomcat.jdbc.pool.DataSource) directamente
Traza de la pila:

    Oct 29, 2012 8:55:50 PM org.apache.tomcat.jdbc.pool.ConnectionPool abandon
    WARNING: Connection has been abandoned PooledConnection[com.mysql.jdbc.JDBC4Connection@1ad2916]:java.lang.Exception
        at org.apache.tomcat.jdbc.pool.ConnectionPool.getThreadDump(ConnectionPool.java:967)
        at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:721)
        at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:579)
        at org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection(ConnectionPool.java:174)
        at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:111)
        at com.getsom.getConnection(DAO.java:1444)
        at com.getsom.PreparedConnection.(PreparedConnection.java:48)
        at com.getsom.Alarms.run(Alarms.java:492)

Mis PoolProperties se configuran de la siguiente manera:

    PoolProperties pp = new PoolProperties();

    pp.setUrl( someValidUrl);
    pp.setDriverClassName("com.mysql.jdbc.Driver");
    pp.setUsername( someUser);
    pp.setPassword( somePassword);
    pp.setJmxEnabled( true);
    pp.setTestWhileIdle( true);
    pp.setTestOnBorrow( true);
    pp.setValidationQuery( "SELECT 1");
    pp.setTestOnReturn( false);
    pp.setValidationInterval(30000);
    pp.setTimeBetweenEvictionRunsMillis(30000);
    pp.setMaxActive(100);
    pp.setInitialSize(10);
    pp.setMaxWait(10000);
    pp.setMinEvictableIdleTimeMillis(30000);
    pp.setMinIdle(10);

    pp.setLogAbandoned(true);
    pp.setRemoveAbandoned(true);
    pp.setRemoveAbandonedTimeout(60);
    pp.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+
      "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");    

    setPoolProperties(pp);

Esperaba que setValidationInterval (30000) me salvara, ya que 30s no es mucho en el ciclo de vida de una conexión. De todos modos la pregunta es:
¿Qué me falta para mantener viva esta conexión para siempre?
Es bueno saberlo: ¿Por qué me estoy agotando el tiempo en la función que reclamó la conexión, aunque se invocó 30 segundos antes?

Respuestas a la pregunta(7)

Su respuesta a la pregunta