Nous avons eu le même problème dans un système de production avec Tomcat6 + Hibernate + MySQL (et Spring dans notre cas) et la seule solution fiable que nous avons trouvée était de définir le délai de connexion sur une valeur élevée dans la configuration MySQL. Je ne me souviens pas des détails, mais je pense qu'il y avait un problème avec le sous-jacent commons-pool code lorsqu'il vérifie que la ressource mise en commun est valide.
Une autre possibilité que nous n'avons pas essayée était d'utiliser un autre mécanisme de regroupement de connexions autre que DBCP. Le prochain essai serait C3PO