Problemas con INFORMIX
Alguien que sepa lo que ocurre con mi aplicación:
Tengo una aplicación que está hecha en java,
la base de datos es INFORMIX
tengo la siguiente
URL
Esta propiedad "IFX_LOCK_MODE_WAIT=-1" me dice que si un registro se encuentra bloqueado va esperar el tiempo que sea necesario hasta que se desbloquee y pueda impactarlo.
pues resulta que en las pruebas finales esto funciona correctamente, si solo se bloquea en un lapso menor a una hora, si el registro queda bloqueado mas de una hora, el sistema se queda pasmado, parece que sigue esperando.
los registros que se habían modificado, se revierten pero el log indica que sigue esperando, no manda ninguna excepcion ni nada
¿Alguien que le haya pasado?
Necesito que me mande una excepcion o siga con el proceso
pero no hace nada..
¿Sugerencias??
gracias
- Inicie sesión o regístrese para enviar comentarios
una hora?
Y por qué un tiempo de espera tan alto?
Por gandules
Pues al usuario se le dijo que con esa configuración, el menos uno, el sistema tenia que esperar hasta que se desbloqueara el registro, entonces dijeron "Ahhhh si ?" ps deja lo bloqueo un día haber si es cierto.. y ps paso esto y el usuario ahora quiere que espere lo que sea necesario, el día completo, y continué el proceso. pero el sistema se pasma, no manda excepcion ni continua y por el lado de base de datos simplemente hace rollback a los registros que ya habia modificado. Esto es correcto ya que el commit es hasta el final, lo que no entiendo es porque no me arroja una excepcion.
Algo no está bien.
Mmm... Algo no está bien.
Sólo por curiosidad, ¿qué versión de Infiernix estás utilizando? ... ¿Eh? ... Quiero decir: de Informix.
Por cierto, en Quick Publications Center search puedes encontrar documentación sobre este RDBMS.
querytimeout
En JDBC4 o JDBC41 ya puedes ponerle un queryTimeout a las consultas para que truenen rápido si es que hay registros bloqueados.
Aún así me parece que el problema raíz es que permitan bloquear un registro tanto tiempo. Los registros no se deben bloquear, punto; lees de la base de datos, cierras tu conexión, permites que editen los datos y después al momento que ya quieren guardar datos, entonces lees el registro de nuevo, esta vez sí bloqueándolo, y luego comparas los datos de cuando leíste el registro antes de empezar la edición con lo que dice ahora; si son iguales, es que nadie más lo ha editado y dado que ya lo bloqueaste, puedes simplemente hacer el UPDATE. Y si los datos son distintos es que alguien más lo modificó en el tiempo que el usuario tomó para modificar datos, y por lo tanto no se puede hacer UPDATE, hay que dar rollback y refrescar los datos en memoria con los datos de la base de datos para que el usuario decida qué hacer en el siguiente intento.