SlideShare una empresa de Scribd logo
1 de 19
Descargar para leer sin conexión
Transacciones

 Relator: Alejandro González (info@janogonzalez.com)
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.DataSourceTr
    ansactionManager">
      <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) {


      .
    ●.

    ●.




        }

Más contenido relacionado

Similar a Curso de Spring: Transacciones

Administración de Transacciones - del tema 1 al 4
Administración de Transacciones - del tema 1 al 4Administración de Transacciones - del tema 1 al 4
Administración de Transacciones - del tema 1 al 4
Mayito Pdg
 
Abf leccion 11
Abf leccion 11Abf leccion 11
Abf leccion 11
victdiazm
 
Estructura de datos c++
Estructura de datos c++Estructura de datos c++
Estructura de datos c++
kikeMerck
 

Similar a Curso de Spring: Transacciones (20)

Capítulo 17 ( Introducción a los conceptos y la Teoría sobre el procesamiento...
Capítulo 17 ( Introducción a los conceptos y la Teoría sobre el procesamiento...Capítulo 17 ( Introducción a los conceptos y la Teoría sobre el procesamiento...
Capítulo 17 ( Introducción a los conceptos y la Teoría sobre el procesamiento...
 
PostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidadPostgreSQL: Un motor Impulsado por una comunidad
PostgreSQL: Un motor Impulsado por una comunidad
 
Taller 18
Taller 18Taller 18
Taller 18
 
Bd no sql tecnicas2
Bd no sql tecnicas2Bd no sql tecnicas2
Bd no sql tecnicas2
 
Sysmana 2017 monitorización de logs con el stack elk
Sysmana 2017   monitorización de logs con el stack elkSysmana 2017   monitorización de logs con el stack elk
Sysmana 2017 monitorización de logs con el stack elk
 
Java8 : Más allá de las Expresiones Lambdas
Java8 :  Más allá de las Expresiones LambdasJava8 :  Más allá de las Expresiones Lambdas
Java8 : Más allá de las Expresiones Lambdas
 
Concurrencia y serialización final 2
Concurrencia y serialización final 2Concurrencia y serialización final 2
Concurrencia y serialización final 2
 
Concurrencia en Java
Concurrencia en Java Concurrencia en Java
Concurrencia en Java
 
SQL Server 2014 Delayed Durability visto desde una aplicación - Alejandro Cor...
SQL Server 2014 Delayed Durability visto desde una aplicación - Alejandro Cor...SQL Server 2014 Delayed Durability visto desde una aplicación - Alejandro Cor...
SQL Server 2014 Delayed Durability visto desde una aplicación - Alejandro Cor...
 
Curso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmpCurso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmp
 
Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magento
 
Informe escrito sobre PSeInt
Informe escrito sobre PSeIntInforme escrito sobre PSeInt
Informe escrito sobre PSeInt
 
Abd clase 5 y 6
Abd clase 5 y 6Abd clase 5 y 6
Abd clase 5 y 6
 
II - Vitaminando nuestros casos de uso
II - Vitaminando nuestros casos de usoII - Vitaminando nuestros casos de uso
II - Vitaminando nuestros casos de uso
 
Administración de Transacciones - del tema 1 al 4
Administración de Transacciones - del tema 1 al 4Administración de Transacciones - del tema 1 al 4
Administración de Transacciones - del tema 1 al 4
 
Haciendo copias de seguridad de todo el conocimiento humano con python y soft...
Haciendo copias de seguridad de todo el conocimiento humano con python y soft...Haciendo copias de seguridad de todo el conocimiento humano con python y soft...
Haciendo copias de seguridad de todo el conocimiento humano con python y soft...
 
Abf leccion 11
Abf leccion 11Abf leccion 11
Abf leccion 11
 
Estructura de datos c++
Estructura de datos c++Estructura de datos c++
Estructura de datos c++
 
Diapo04
Diapo04Diapo04
Diapo04
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 

Más de Jano González

Más de Jano González (14)

Spring jdbc
Spring jdbcSpring jdbc
Spring jdbc
 
Vim FTW!
Vim FTW!Vim FTW!
Vim FTW!
 
Ruby
RubyRuby
Ruby
 
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
 
JRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterpriseJRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterprise
 
Programación Políglota en la JVM
Programación Políglota en la JVMProgramación Políglota en la JVM
Programación Políglota en la JVM
 
A Little RSpec
A Little RSpecA Little RSpec
A Little RSpec
 
JRuby ¿Lo mejor de dos mundos?
JRuby ¿Lo mejor de dos mundos?JRuby ¿Lo mejor de dos mundos?
JRuby ¿Lo mejor de dos mundos?
 
Un emulador de Game Boy escrito en Ruby (parte 1)
Un emulador de Game Boy escrito en Ruby (parte 1)Un emulador de Game Boy escrito en Ruby (parte 1)
Un emulador de Game Boy escrito en Ruby (parte 1)
 
Taller de Unit Testing y TDD en Java: Parte 1
Taller de Unit Testing y TDD en Java: Parte 1Taller de Unit Testing y TDD en Java: Parte 1
Taller de Unit Testing y TDD en Java: Parte 1
 
Análisis y Diseño OO 2
Análisis y Diseño OO 2Análisis y Diseño OO 2
Análisis y Diseño OO 2
 
Análisis y Diseño OO 1
Análisis y Diseño OO 1Análisis y Diseño OO 1
Análisis y Diseño OO 1
 
Programación Java
Programación JavaProgramación Java
Programación Java
 
Un newbie conoce a Sinatra
Un newbie conoce a SinatraUn newbie conoce a Sinatra
Un newbie conoce a Sinatra
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (12)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 

Curso de Spring: Transacciones

  • 1. Transacciones Relator: Alejandro González (info@janogonzalez.com)
  • 2. Temario General ➔ Transacciones ➔ Configurando Transacciones con XML ➔ Configurando Transacciones con anotaciones
  • 4. 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.
  • 5. Propagación ➔ Niveles típicos de propagación de transacciones: ➔ REQUIRED ➔ REQUIRES_NEW ➔ SUPPORTED ➔ NOT_SUPPORTED ➔ MANDATORY ➔ NEVER
  • 6. Transacciones ➔ Para transacciones distribuídas se debe usar XA
  • 7. Si lo recuerdo... ¿Pero cómo Spring facilita el uso de esta API?
  • 9. TXs Declarativas con XML ➔ Primero necesitamos un manejador de transacciones: ➔ DataSourceTransactionManager ➔ JtaTransactionManager ➔ HibernateTransactionManager ➔ JpaTransactionManager. ➔ Etc...
  • 10. TXs Declarativas con XML ➔ Primero necesitamos un manejador de transacciones <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTr ansactionManager"> <property name="dataSource" ref="dataSource" /> </bean>
  • 11. TXs Declarativas con XML ➔ Luego un advice ●<tx:advice id="transferenciaTxAdvice" transaction- manager="transactionManager"> ● <tx:attributes> ● <tx:method name="transferir" /> ● </tx:attributes> ●</tx:advice>
  • 12. 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>
  • 13. Momento... ¿Hay una manera más simple de hacerlo?
  • 14. Java 5 al rescate
  • 15. TXs Declarativas con Anotaciones ➔ Primero necesitamos un manejador de transacciones ➔ Luego usamos la configuración <tx:annotation- driven />
  • 16. TXs Declarativas con Anotaciones ➔ Los métodos transaccionales se anotan con @Transactional ●@Transactional ●public Transferencia transferir(Cuenta origen, Cuenta destino, BigDecimal monto) { . ●. ●. }
  • 17. 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) { . ●. ●. }
  • 18. 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) { . ●. ●. }
  • 19. TXs Declarativas con Anotaciones ➔ Otros atributos son timeout y read-only ● @Transactional( ● propagation = Propagation.REQUIRED, ● timeout = 30, ● readOnly = true ●) ●public Cuenta obtenerCuenta(String id) { . ●. ●. }