O mais fácil é configurar o pool de conexões para especificar a consulta a ser executada para testar a conexão antes que ela seja passada para o aplicativo:
validationQuery="select 1 as dbcp_connection_test"
testOnBorrow=true
Essa mesma consulta de "validação de conexão" pode ser executada em outros eventos. Não tenho certeza dos padrões para estes:
testOnReturn=true
testWhileIdle=true
Há também definições de configuração que limitam a "idade" das conexões inativas no pool, o que pode ser útil se as conexões inativas estiverem sendo fechadas no servidor.
minEvictableIdleTimeMillis
timeBetweenEvictionRunsMillis
http://commons.apache.org/dbcp/configuration.html