2011-05-17 14 views
7

Tengo algunas preguntas relacionadas con las conexiones y las transacciones de primavera.¿Una conexión en la transacción de primavera?

  1. hace uso de resorte de la misma instancia de conexión cuando se ejecutan múltiples métodos que realizan DML & operaciones DDL en una transacción (nivel de propagación necesarios)? He leído que mantiene la misma conexión, pero no sé por qué y cómo lo hace técnicamente. Al explicar cómo se proporcionan algunos consejos en el código fuente del muelle, sería útil.

  2. Usando Spring Declarative Transactions si utilizo Serializable como el nivel de aislamiento, ¿me aseguraría que siempre se usa una conexión mientras realizo operaciones de base de datos en ese método o en cualquier otro método llamado desde el método transaccional original?

¿Hay algún punto que deba tener en cuenta al trabajar con Spring Transactions teniendo en cuenta este tema?

Cualquier idea/ayuda sobre este tema sería apreciada. Gracias.

Actualización 1 - Disculpe por error que he escrito un nivel de propagación serializable en lugar de un nivel de aislamiento. Corregido.

Respuesta

5
  1. La gestión de transacciones de Spring es solo una interfaz unificada para diferentes recursos transaccionales, como las conexiones JDBC. Dado que para la mayoría de los recursos transaccionales no tiene sentido tener una transacción que se propague a través de múltiples conexiones, todas las operaciones en las transacciones administradas por Spring para estos recursos se ejecutan en la misma conexión. Por supuesto, si usa transacciones distribuidas con JtaTransactionManager, cada recurso transaccional involucrado en la transacción distribuida tendría su propia conexión.

  2. Los niveles de aislamiento de transacciones no tienen nada que ver con la gestión de transacciones de Spring. Their meaning is defined in the database theory. Además, no están relacionados con la propagación de transacciones.

primavera implementa este comportamiento por conexiones stroing (tales como JDBC Connection s) como una parte de subproceso local estado usando TransactionSynchronizationManager. Ver, por ejemplo, DataSourceUtils.

+0

¿Puede explicar los puntos siguientes? 1. "Dado que para la mayoría de los recursos transaccionales no tiene sentido tener una transacción que se propague a través de múltiples conexiones". ¿A qué recursos transaccionales se refiere? 2. ¿Cómo se gestiona la primavera para obtener la misma conexión para todas las operaciones de DB realizadas en una transacción? (Si puede señalar algún código de primavera que puedo echarle un vistazo, sería genial). –

+0

En la pregunta por error agregué nivel de propagación serializable en lugar de nivel de aislamiento. Corregido. –

+0

@Amit: recursos transaccionales son recursos que proporcionan un comportamiento transaccional. Básicamente, son las bases de datos y las colas de mensajes. – axtavt

Cuestiones relacionadas