Download - Curso de Spring: Transacciones
![Page 2: Curso de Spring: Transacciones](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/2.jpg)
Temario General
➔ Transacciones➔ Configurando Transacciones con XML➔ Configurando Transacciones con anotaciones
![Page 3: Curso de Spring: Transacciones](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/3.jpg)
ACID
![Page 4: Curso de Spring: Transacciones](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/5.jpg)
Propagación
➔ Niveles típicos de propagación de transacciones:➔ REQUIRED➔ REQUIRES_NEW➔ SUPPORTED➔ NOT_SUPPORTED➔ MANDATORY➔ NEVER
![Page 6: Curso de Spring: Transacciones](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/6.jpg)
Transacciones
➔ Para transacciones distribuídas se debe usar XA
![Page 7: Curso de Spring: Transacciones](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/7.jpg)
Si lo recuerdo...¿Pero cómo Spring facilita
el uso de esta API?
![Page 8: Curso de Spring: Transacciones](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/8.jpg)
Nuevamente...DRY al rescate
![Page 9: Curso de Spring: Transacciones](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/9.jpg)
TXs Declarativas con XML
➔ Primero necesitamos un manejador de transacciones:➔ DataSourceTransactionManager➔ JtaTransactionManager➔ HibernateTransactionManager➔ JpaTransactionManager.➔ Etc...
![Page 10: Curso de Spring: Transacciones](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/11.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/13.jpg)
Momento...¿Hay una manera más simple de hacerlo?
![Page 14: Curso de Spring: Transacciones](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/14.jpg)
Java 5 al rescate
![Page 15: Curso de Spring: Transacciones](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/15.jpg)
TXs Declarativas con Anotaciones
➔ Primero necesitamos un manejador de transacciones
➔ Luego usamos la configuración <tx:annotation-driven />
![Page 16: Curso de Spring: Transacciones](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/16.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/17.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.pub/reader031/viewer/2022020116/559af0381a28ab88218b4861/html5/thumbnails/19.jpg)
TXs Declarativas con Anotaciones
➔ Otros atributos son timeout y read-only
●@Transactional(● propagation = Propagation.REQUIRED,● timeout = 30,● readOnly = true●)●public Cuenta obtenerCuenta(String id) {.
●.●.
}