jueves, octubre 07, 2010

MySQL: Lock wait timeout exceeded

Trabajando con MySql e iBatis me topé con un problema que, en principio no tenía muy claro de dónde podía venir.

El caso es que, aparentemente, de forma aleatoria cuando hacía un insert o un update, la aplicación dejaba de responder y acababa mostrando una traza como esta:

java.sql.SQLException: Lock wait timeout exceeded...

Después de mucho mirar y también mucho buscar en Google, caí en la cuenta que el problema lo daba una query que abría una transacción que no se cerraba antes de ser devuelta al pool.

En un método de la aplicación estaba abriendo una transacción y cerrandola en el catch en lugar de en el finally. Un finally y un endTransaction después, puedo respirar tranquilo... y por supuesto, mil gracias a este post sin el cual aún seguiría dando vueltas por los fuentes de la aplicación como alma en pena.

miércoles, septiembre 15, 2010

Clase BeanUtils de Apache Commons y las fechas

Hola,

Usando el API BeanUtils de Apache, en concreto su (gran) método copyProperties, me dí cuenta de que cuando el bean a copiar tenía algún campo con fechas y estas estaban a null se obtenía la siguiente traza:


No value specified for 'Date'
org.apache.commons.beanutils.ConversionException: No value specified for 'Date'


Bien, buscando por ahí encontré una forma de seguir usando BeanUtils aún cuando el bean tiene fechas a nulo.


Date defaultValue = null;
DateConverter converter = new DateConverter (defaultValue);
ConvertUtils.register (converter, java.util.Date.class);

BeanUtils.copyProperties (view, nuevo);


Simple pero eficaz. Lo encontré en un foro, pero no lo menciono ya que el "descubrimiento" fue hace ya bastante tiempo y no tengo ni idea de dónde lo saqué.