2010-09-07 8 views
7

Ha habido varias publicaciones de inicio de sesión de la actividad (inicio, commit & rollback) del administrador de transacciones de Spring. Sin embargo, recientemente me encontré con un problema de interbloqueo para el cual el registro solo de la actividad no es suficiente.Cómo registrar el contenido de transacción de Spring

El problema fundamental en nuestro código es un uso desordenado de propagaciones de transacciones REQUERIDAS y REQUERES_NUEVAS. Hay tantas llamadas de método de ida y vuelta que terminamos con muchas transacciones apiladas entre sí. Desgraciadamente, el código base es enorme y la solución urgente ... (Todos sabemos qué es esto)

El problema era un interbloqueo porque el código se agregaba a las entidades de consulta en una transacción que se modificaba secuencialmente en otro transacción. Spring escupe una excepción que dice que la actualización de la entidad X se agotó porque está bloqueada. Ahora bien, saber esto es agradable, pero ¿cómo se puede encontrar el código defectuoso? La consulta que realiza el bloqueo anticipado.

Mi pregunta (por fin): ¿Hay alguna manera de registrar las entidades que se agregan a una transacción? De esta manera, puedo buscar específicamente transacciones que bloqueen la entidad de la que Spring se queja.

Gracias! :-)

Respuesta

0

Intente registrar consultas en su ORM. Puede ser que sea una forma más fácil de encontrar una transacción "mala".

1

Spring delega en un administrador de transacciones, por lo que Spring no sabe qué entidades se tocan en la transacción, sí lo hace el administrador de transacciones. Como dijo Donz, mirar al gerente de transacciones para obtener información es el mejor enfoque investigativo.

También podría revisar todas las definiciones de transacción y eliminar REQUIRES_NEW de todo excepto escribir solo/escribir siempre métodos de tipo (como auditoría o registro). Si tiene REQUERES_NEW en su lógica comercial principal, es un error o un diseño muy extraño. La eliminación ciega podría tener menos efectos secundarios de lo que piensas.

Cuestiones relacionadas