La primera solución y más obvia al problema sería reconectar si la conexión se ha terminado. Pero si nuestra aplicación está diseñada sobre el framework Hibernate nos encontramos con otro problema: Hibernate no es capaz de volver a conectar sin configurar algún tipo de pool de conexiones.
Si queremos desarrollar una aplicación J2EE diseñada con Hibernate y usando conexiones sobre MySQL tendremos que incluir alguna funcionalidad que nos permita solventar este problema. Esta solución nos la proporciona la librería c3p0.
c3p0 es una librería de fácil uso que aumenta la funcionalidad de los drivers JDBC para las conexiones de las aplicaciones con base de datos.
No necesita ninguna instalación, simplemente se agrega la librería a la aplicación y se modifica el archivo de configuración de Hibernate para su uso.
Aquí pongo un ejemplo sencillo de las líneas que habría que añadir a dicho archivo (hibernate.cfg.xml):
<!-- configuration pool via c3p0 -->
<property name="c3p0.acquire_increment">1</property>
<property name="c3p0.idle_test_period">100</property>
<!-- seconds -->
<property name="c3p0.max_size">100</property>
<property name="c3p0.max_statements">0</property>
<property name="c3p0.min_size">10</property>
<property name="c3p0.timeout">100</property>
<!-- seconds -->
* Documentación de la librería:
http://www.mchange.com/projects/c3p0/index.html
* Propiedades de la configuración:
http://community.jboss.org/wiki/HowToconfiguretheC3P0connectionpool
* Última versión (0.9.1.2) disponible en SourceForge:
http://sourceforge.net/projects/c3p0/