SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
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) {


      .
    ●.

    ●.




        }

Weitere ähnliche Inhalte

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von Jano González

Mehr von 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
 

Kürzlich hochgeladen

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Kürzlich hochgeladen (11)

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
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
 
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.
 
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 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
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
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
 
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
 
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
 

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