curso de spring: transacciones
DESCRIPTION
Parte de un curso de Spring que dictéTRANSCRIPT
Transacciones
Relator: Alejandro González ([email protected])
Temario General
➔ Transacciones➔ Configurando Transacciones con XML➔ Configurando Transacciones con anotaciones
ACID
ACID
➔ Atomicity: La transacción se realiza completa o no se realiza, sin estados intermedios.
➔ Consistency: Una vez que todos los pasos se han realizados, los datos quedan en un estado consistente.
➔ Isolation: Las transacciones se ejecutan en forma aislada.
➔ Durability: Una vez terminada la transacción, sus datos deben sobrevivir una falla del sistema.
Propagación
➔ Niveles típicos de propagación de transacciones:➔ REQUIRED➔ REQUIRES_NEW➔ SUPPORTED➔ NOT_SUPPORTED➔ MANDATORY➔ NEVER
Transacciones
➔ Para transacciones distribuídas se debe usar XA
Si lo recuerdo...¿Pero cómo Spring facilita
el uso de esta API?
Nuevamente...DRY al rescate
TXs Declarativas con XML
➔ Primero necesitamos un manejador de transacciones:➔ DataSourceTransactionManager➔ JtaTransactionManager➔ HibernateTransactionManager➔ JpaTransactionManager.➔ Etc...
TXs Declarativas con XML
➔ Primero necesitamos un manejador de transacciones
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" /></bean>
TXs Declarativas con XML
➔ Luego un advice
●<tx:advice id="transferenciaTxAdvice" transaction-manager="transactionManager">
● <tx:attributes>● <tx:method name="transferir" />
● </tx:attributes>●</tx:advice>
TXs Declarativas con XML
➔ Y finalmente configuramos el pointcut
<aop:config><aop:pointcut id="transferenciaPointcut" expression="execution(*
com.ejemplo.services.TransferenciaService.*(..))" />
<aop:advisor advice-ref="transferenciaTxAdvice"pointcut-ref="transferenciaPointcut" />
</aop:config>
Momento...¿Hay una manera más simple de hacerlo?
Java 5 al rescate
TXs Declarativas con Anotaciones
➔ Primero necesitamos un manejador de transacciones
➔ Luego usamos la configuración <tx:annotation-driven />
TXs Declarativas con Anotaciones
➔ Los métodos transaccionales se anotan con @Transactional
●@Transactional●public Transferencia transferir(Cuenta origen, Cuenta destino, BigDecimal monto) {.
●.●.
}
TXs Declarativas con Anotaciones
➔ También podemos usar atributos de propagación
●@Transactional(propagation = Propagation.REQUIRED)●public Transferencia transferir(Cuenta origen, Cuenta destino, BigDecimal monto) {.
●.●.
}
TXs Declarativas con Anotaciones
➔ También podemos definir condiciones de Rollback
●@Transactional(● propagation = Propagation.REQUIRED,● rollbackFor = IOException.class,● noRollbackFor = ArithmeticException.class●)●public Transferencia transferir(Cuenta origen, Cuenta destino, BigDecimal monto) {.
●.●.
}
TXs Declarativas con Anotaciones
➔ Otros atributos son timeout y read-only
●@Transactional(● propagation = Propagation.REQUIRED,● timeout = 30,● readOnly = true●)●public Cuenta obtenerCuenta(String id) {.
●.●.
}