De acuerdo con Java Persistent/Locking wikibooks *, la mejor manera de manejar bloqueos es informar al usuario sobre el error/excepción de bloqueo optimista.¿Cómo lidiar con bloqueos (JPA)?
El problema es que no es escalable. Supongamos que tengo muchos usuarios que pueden causar un bloqueo con la misma acción. Al usuario no le importa el mensaje de error de bloqueo.
En pocas palabras:
- La mejor manera es desactivar todos los bloqueos?
- ¿La mejor manera es informar al usuario del mensaje de bloqueo de error? ¡Pero el usuario debe volver a intentar su acción hasta que funcione!
- ¿La mejor manera es reintentar la transacción hasta que no haya bloqueo?
*
manejo de excepciones bloqueo optimista
Desafortunadamente programadores con frecuencia pueden ser demasiado inteligente para su propio bien. El primer problema que surge al utilizar el bloqueo optimista es qué hacer cuando ocurre una OptimisticLockException. La respuesta típica del súper programador de vecindario amigable es manejar automáticamente la excepción. Simplemente crearán una nueva transacción, actualizarán el objeto para restablecer su versión, y fusionarán los datos nuevamente en el objeto y lo volverán a comprometer. Problema de Presto resuelto, o es?
En realidad, esto frustra el punto de bloqueo total. Si esto es lo que deseas, también puedes usar ningún bloqueo. Desafortunadamente, la OptimisticLockException rara vez se debe manejar automáticamente, y realmente debe molestar al usuario sobre el problema. Debe informar el conflicto al usuario y decir "lo siento, pero se produjo un conflicto de edición y van a tener que volver a hacer su trabajo", o en el mejor de los casos, actualizar el objeto y presentar al usuario los datos actuales y los datos que presentaron y ayudarlos a fusionar los dos si corresponde.
Algunas herramientas de combinación automatizadas compararán las dos versiones en conflicto de los datos y si ninguno de los campos individuales entran en conflicto, los datos se fusionarán automáticamente sin la ayuda del usuario. Esto es lo que hacen la mayoría de los sistemas de control de versiones de software. Lamentablemente, el usuario suele ser más capaz de decidir cuándo algo es un conflicto que el programa, simplemente porque dos versiones del archivo .java no cambiaron la misma línea de código no significa que no hubo conflicto, el primer usuario podría haber eliminado un método que el otro usuario agregó un método de referencia, y varios otros posibles problemas que hacen que la construcción típicamente nocturna se rompa cada cierto tiempo.
posible duplicado de [¿Cómo deshabilitar el sistema de bloqueo de JPA?] (Http://stackoverflow.com/questions/7201940/how-to-disable-the-lock-system-of-jpa), del mismo autor. –
Diría que no están duplicados, porque uno pregunta cómo deshabilitar, y el otro pregunta por la estrategia con bloqueos. – edutesoy