Download Hibernate Core – Clase 1
Document related concepts
no text concepts found
Transcript
Softlogia S.R.L. Formación de Recursos Humanos Hibernate Core Instructor: Martin R. Baspineiro Hibernate Core – Clase 1 Hibernate Core Porque debemos conocer Hibernate? Conceptos necesarios Persistencia Relacional con Hibernate Las capas de Hibernate La Arquitectura de Hibernate La arquitectura Mínima La arquitectura Completa Los Componentes de la arquitectura Los estados de una instancia Arquitectura de una aplicación que usa Hibernate Practica Hibernate Core – Clase 1 Porque debemos conocer hibernate? Para conocer un framework que nos permita persistir nuestros objetos de dominio en una base de datos relacional. Para conocer el funcionamiento de un framework de persistencia objeto-relacional. Para desarrollar aplicaciones java profesionales. Hibernate Core – Clase 1 Conceptos necesarios POJO: Plain Old Java Object. Se usa este nombre para enfatizar que se trata de un objeto java simple, en particular que no se trata de Enterprise Java Bean Java Bean: se usa este nombre para identificar a un objeto que tiene sus atributos definidos como private, que permite el acceso a sus atributos mediante accessors públicos, que tiene un constructor sin argumentos y que implementa la interfaz serializable. Hibernate Core – Clase 1 Conceptos necesarios Thread-safe: se dice que un pedazo de código es thread-safe, cuando es seguro de ejecutarse concurrentemente por múltiples hilos (threads) Single-Threaded: se dice que un pedazo de código es single-threaded, cuando es ejecutado por un único hilo en cualquier momento. Hibernate Core – Clase 1 Persistencia Relacional con Hibernate Históricamente, Hibernate ha facilitado el almacenamiento y recuperación de objetos de dominio java mediante el mapeo objeto-relacional. Actualmente, Hibernate es una colección de proyectos relacionados que permiten a los desarrolladores utilizar modelos de dominio del estilo POJO en sus aplicaciones. Hibernate Core – Clase 1 Las capas de Hibernate Hibernate Core – Clase 1 La arquitectura de Hibernate Hibernate Core – Clase 1 La arquitectura de Hibernate La arquitectura mínima Hibernate Core – Clase 1 La arquitectura de Hibernate La arquitectura completa Hibernate Core – Clase 1 La arquitectura de Hibernate Los componentes de la arquitectura. SessionFactory: es una cache, inmutable y thread-safe, que contiene los mapeos compilados de una base de datos. Es una factoría de objetos Session. Es un cliente de ConnectionProvider. Session: es un objeto single-threaded de vida corta que representa la conversación entre la aplicación y almacenamiento persistente. Envuelve una conexión JDBC. Es una factoría de objetos Transaction. Mantiene un cache de objetos persistentes. Hibernate Core – Clase 1 La arquitectura de Hibernate Los componentes de la arquitectura. Persistent objects and collections: son objetos single-thread de vida corta que tienen un estado persistente y funciones de negocio. Están asociados exactamente a una única Session. Una vez que la session es cerrada serán detachados y libres de usar por cualquier aplicación. Transient and detached objects and collections: son objetos de clases persistentes que no están asociados a una Session. Transaction: es un objeto single-thread de vida corta utilizado para especificar unidades de trabajo atómicas. Abstrae a la aplicación de la transacción subyacente (JDBC, JTA). Una Session puede ejecutar varias transacciones. La demarcación de una transacción no es opcional Hibernate Core – Clase 1 La arquitectura de Hibernate Los componentes de la arquitectura. ConnectionProvider: es una factoría y pool de conexiones JDBC. Abstrae a la aplicación de los Datasource o DriverManager subyacentes. TransactionFactory: es una factoría para instancias de Transaction. No esta expuesta a la aplicación, pero puede ser extendida o implementada por el desarrollador. Extension Interfaces: es un rango de interfaces de extensión opcionales que el desarrollador puede utilizar para customizar el comportamiento de la capa de persistencia. Hibernate Core – Clase 1 Los estados posibles de una instancia Se definen en base a su relación con el contexto de persistencia (el objeto Session de Hibernate). Transient: la instancia no esta asociada a ningún contexto de persistencia. No tiene un identificador de persistencia o PK. Persistent: la instancia esta asociada a un contexto de persistencia. Tiene un identificador de persistencia y puede corresponderse con un registro de la base de datos. Detached: la instancia estuvo asociada a un contexto de persistencia, pero el contexto de persistencia fue cerrado, o la instancia fue serializada por otro proceso. Tiene un identificador de persistencia y puede corresponderse con un registro de la base de datos. Hibernate Core – Clase 1 Arquitectura de una aplicación que usa Hibernate Hibernate Core – Clase 1 La clase de dominio Es una clase java. Es un java bean o POJO. Requiere de un constructor sin argumentos. Es conveniente que tenga un atributo para definir el id. Puede tener definido comportamiento, sin embargo no es conveniente salvo excepciones. Hibernate Core – Clase 1 El archivo de Mapeo Esta definido en xml Define la relación objeto relacional Relaciona cada campo de la tabla con un atributo de la clase de dominio. Define las relaciones del modelo relacional como asociaciones entre clases. Por defecto ningún atributo de la clase de dominio es considerado persistente. Hibernate Core – Clase 1 El archivo de configuración Puede ser archivo properties o un xml (recomendado) Define el componente SessionFactory. Define la conexión JDBC. Define el dialecto SQL. Define los arhivos de mapeo que utilizara. Hibernate Core – Clase 1 Startup y Helper Para inicializar Hibernate es util crearse una clase HibernateUtil que nos permite obtener el contexto de persistencia (SessionFactory) public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory() { try { // Create the SessionFactory from hibernate.cfg.xml return new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } } Hibernate Core – Clase 1 Las Implementaciones de DAOs Son implementaciones de las interfaces definidas para la realización de operaciones CRUD. Una implementación de DAO con hibernate debería tener un método como el siguiente: private void createAndStoreEvent(String title, Date theDate) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Event theEvent = new Event(); theEvent.setTitle(title); theEvent.setDate(theDate); session.save(theEvent); session.getTransaction().commit(); } Hibernate Core – Clase 1 Los Servicios Son la implementación del patrón de diseño Facade Implementan toda la lógica de negocios Están compuestos por las interfaces DAOS, a través de las cuales realizan las operaciones CRUD con las clases de dominio. Permiten la separación por capas de la capa de modelo. Hibernate Core – Clase 1 Practica Realizar el ejemplo definido en el tutorial de hibernate 3.5.1