M3-UF2 PERSISTENCIA CON HIBERNATE

UNIDAD 6: Transacciones, concurrencia y cacheo

eugeniaperez.es

UNIDAD 6: TRANSACCIONES, CONCURRENCIA Y CACHEO

 

eugeniaperez.es

6.1 Gestión de bloqueos

Hibernate usa conexiones JDBC

SessionFactory:

  • Seguro entre hilos
  • Costoso de crear (todos los hilos lo comparten)
  • Se crea una sola vez a partir del objeto Configuration

UNIDAD 6: TRANSACCIONES, CONCURRENCIA Y CACHEO

 

eugeniaperez.es

6.1 Gestión de bloqueos

Session:

  • Bajo coste de creación
  • Inseguro entre hilos
  • Se crea una vez y se descarta

Transacción

  • Debe ser tan corta como sea posible para reducir bloqueos

UNIDAD 6: TRANSACCIONES, CONCURRENCIA Y CACHEO

 

eugeniaperez.es

6.1 Gestión de bloqueos

Unidad de trabajo:

  • Patrón de diseño (Martin Fowler)
  • Coordina la escritura de los cambios acontecidos para que se persistan juntos
  • No usar sesión por operación contra BDD
  • Lo más común es usar sesión por petición (cliente/servidor)
  • No es necesario invocar flush()

UNIDAD 6: TRANSACCIONES, CONCURRENCIA Y CACHEO

 

eugeniaperez.es

6.1 Gestión de bloqueos

try {
    factory.getCurrentSession().beginTransaction();

    // do some work
    ...

    factory.getCurrentSession().getTransaction().commit();
}
catch (RuntimeException e) {
    factory.getCurrentSession().getTransaction().rollback();
    throw e; // or display error message
} finally{
    factory.getCurrentSession.close();
}

UNIDAD 6: TRANSACCIONES, CONCURRENCIA Y CACHEO

 

eugeniaperez.es

6.1 Gestión de bloqueos

Manejo de excepciones:

  • Si la Session lanza una excepción:
    • Deshacer la transacción
    • Session.close() -> dentro de un finally

UNIDAD 6: TRANSACCIONES, CONCURRENCIA Y CACHEO

 

eugeniaperez.es

6.2 Arquitectura de caché del ORM

Podemos utilizar distintas implementaciones de caché

  • org.hibernate.cache.CacheProvider
  • Propiedad hibernate.cache.provider_class
  • Hashtable es el más básico
Made with Slides.com