Supongo que el problema surge porque el servidor de la base de datos elimina la conexión mientras que el grupo de conexiones de la aplicación todavía tiene un control sobre ella. Al tener un tiempo de espera en el grupo de conexiones de la aplicación más corto que en el lado del servidor de la base de datos, el grupo de conexiones de la aplicación renueva la conexión antes de que el servidor de la base de datos lo elimine, evitando así el problema. Mi servidor de base de datos MySQL tiene un tiempo de espera de 28800 segundos y mi grupo de conexiones de aplicaciones C3P0 tiene un tiempo de espera de 14400 segundos. Tiene sentido que la cadena de esperas de tiempo de espera sea más corta de los servidores a los clientes.