curso de spring: transacciones

19
Transacciones Relator: Alejandro González ([email protected])

Upload: jano-gonzalez

Post on 07-Jul-2015

2.220 views

Category:

Technology


3 download

DESCRIPTION

Parte de un curso de Spring que dicté

TRANSCRIPT

Page 1: Curso de Spring: Transacciones

Transacciones

Relator: Alejandro González ([email protected])

Page 2: Curso de Spring: Transacciones

Temario General

➔ Transacciones➔ Configurando Transacciones con XML➔ Configurando Transacciones con anotaciones

Page 3: Curso de Spring: Transacciones

ACID

Page 4: Curso de Spring: Transacciones

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.

Page 5: Curso de Spring: Transacciones

Propagación

➔ Niveles típicos de propagación de transacciones:➔ REQUIRED➔ REQUIRES_NEW➔ SUPPORTED➔ NOT_SUPPORTED➔ MANDATORY➔ NEVER

Page 6: Curso de Spring: Transacciones

Transacciones

➔ Para transacciones distribuídas se debe usar XA

Page 7: Curso de Spring: Transacciones

Si lo recuerdo...¿Pero cómo Spring facilita

el uso de esta API?

Page 8: Curso de Spring: Transacciones

Nuevamente...DRY al rescate

Page 9: Curso de Spring: Transacciones

TXs Declarativas con XML

➔ Primero necesitamos un manejador de transacciones:➔ DataSourceTransactionManager➔ JtaTransactionManager➔ HibernateTransactionManager➔ JpaTransactionManager.➔ Etc...

Page 10: Curso de Spring: Transacciones

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>

Page 11: Curso de Spring: Transacciones

TXs Declarativas con XML

➔ Luego un advice

●<tx:advice id="transferenciaTxAdvice" transaction-manager="transactionManager">

● <tx:attributes>● <tx:method name="transferir" />

● </tx:attributes>●</tx:advice>

Page 12: Curso de Spring: Transacciones

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>

Page 13: Curso de Spring: Transacciones

Momento...¿Hay una manera más simple de hacerlo?

Page 14: Curso de Spring: Transacciones

Java 5 al rescate

Page 15: Curso de Spring: Transacciones

TXs Declarativas con Anotaciones

➔ Primero necesitamos un manejador de transacciones

➔ Luego usamos la configuración <tx:annotation-driven />

Page 16: Curso de Spring: Transacciones

TXs Declarativas con Anotaciones

➔ Los métodos transaccionales se anotan con @Transactional

●@Transactional●public Transferencia transferir(Cuenta origen, Cuenta destino, BigDecimal monto) {.

●.●.

}

Page 17: Curso de Spring: Transacciones

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) {.

●.●.

}

Page 18: Curso de Spring: Transacciones

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) {.

●.●.

}

Page 19: Curso de Spring: Transacciones

TXs Declarativas con Anotaciones

➔ Otros atributos son timeout y read-only

●@Transactional(● propagation = Propagation.REQUIRED,● timeout = 30,● readOnly = true●)●public Cuenta obtenerCuenta(String id) {.

●.●.

}