Eu tive problemas semelhantes com o MySQL e um pool de conexão. O problema é que você informa ao pool de conexões que um tempo limite ocioso é de 30 minutos, mas o banco de dados corta a conexão após 10 segundos. Como o período de verificação de conexão ociosa é de 120 segundos, resta um pouco menos de 110 segundos para o pool usar uma conexão interrompida!
Eu usaria as seguintes configurações para produção:
MySQL:
wait_timeout=75
C3P0:
maxIdleTime=60
idleConnectionTestPeriod=55