Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1....

62
Persistencia para Objetos Introducción

Transcript of Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1....

Page 1: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Persistencia para Objetos

Introducción

Page 2: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Persistencia� Necesidad de que los datos manejados por un

programan sobrevivan más allá de la ejecución de este.� Pocos programas no necesitan persistencia

PPO � persistencia

nov-08 [email protected] 2

� Pocos programas no necesitan persistencia� Pero un tipo de programas la necesitan con especial énfasis:

� Los Sistemas de Información� Son un mercado muy amplio

� Varias formas de conseguirla� Ficheros� Bases de datos� Etc…

Page 3: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Bases de datos relacionales

� Muy extendidas� Grandes inversiones en las empresas� Muy robustas� Modelo muy flexible

Soporte completo y consistente en el álgebra relacional

PPO � persistencia

nov-08 [email protected] 3

� Soporte completo y consistente en el álgebra relacional� Con añadido de SQL

� Permiten Independencia de datos y procesos� Los datos sobreviven a las aplicaciones� Muchas nuevas aplicaciones están obligadas a trabajar con

BBDD heredadas� Permiten interoperabilidad entre aplicaciones

� Forma de compartir datos entre aplicaciones� Común denominador de muchos sistemas y tecnologías

dispares

Page 4: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

SQL, varios lenguajes

� Más o menos estándar� DDL� DML

insertBases de datos relacionales + SQL son

PPO � persistencia

nov-08 [email protected] 4

� insert� update� delete

� Queries� join� selection� projection

Bases de datos relacionales + SQL son un poderoso tándem imposible de desbancar.

Están para quedarse todavía mucho tiempo.

Page 5: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

SQL en Java

� Usando el API JDBC� Programando directamente JDBC API

� Connection, Statement, ResultSet, etc.

� Generación automática de código

PPO � persistencia

nov-08 [email protected] 5

� Generación automática de código� Desde modelos (MDA, MDD, etc.)� SQLJ (SQL incrustado en Java)

� Cuestiones de bajo nivel expuestas al programador� Código muy tedioso

� Se pierde el diseño Orientado a Objetos� Todo son tablas, filas y sentencias� Lleva a retorcer los modelos de objetos elegantes para que

se adapten al modelo relacional

Page 6: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

SQL en Java (2)

� ¿Es SQL y el modelo relacional apto para programar aplicaciones orientadas a objetos ?

Son paradigmas distintos, pero…

PPO � persistencia

nov-08 [email protected] 6

� Son paradigmas distintos, pero…� … en cuanto a persistencia:

� Las BBDD relacionales son muy sólidas� Están muy extendidas� Es lo que hay� …pero son distintos paradigmas…

Page 7: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

SQL en Java (3)

SQL en Java (3)

nov-08 [email protected] 7

Page 8: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Aplicaciones OO con persistencia

� Tipos de objetos:� Objetos persistentes, se necesita:

� Almacenamiento, organización y recuperaciónConcurrencia e integridad de datos

PPO � persistencia

nov-08 [email protected] 8

� Concurrencia e integridad de datos� Objetos transitorios

� Modelo de dominio� Analizado, Diseñado e implementado en un lenguaje OO

� Persistencia en BBDD relacional

Distintosparadigmas

Page 9: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

La desadaptación

Page 10: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Diferentes paradigmas

� Mundo OO� Los objetos se relacionan entre si formando grafos� Navegación por referencias� No hay modelo formal

PPO � desadaptación

nov-08 [email protected] 10

� No hay modelo formal� Mundo Relacional

� Los datos están en tablas con integridad referencial

� Operaciones con semántica formal definidas por el algebra relacional

� Operaciones siempre dan tablas (conjuntos)� No hay navegación, hay joins entre tablas

Page 11: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Ejemplo

PPO � desadaptación

nov-08 [email protected] 11

En realidad en Java son dos referencias

Page 12: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Ejemplo en Relacional

PPO � desadaptación

nov-08 [email protected] 12

Page 13: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Diferentes paradigmas� El análisis se hace orientado a objetos� El diseño también (patrones de diseño, etc)� Disponemos de lenguajes OO (java en este caso)

PPO � desadaptación

nov-08 [email protected] 13

caso)� Pero si tiene que haber persistencia…

� ¿ hay que renunciar a los modelos OO de diseño y retorcerlo todo para ajustarlo al paradigma relacional ?

� … y acabo programando pensando en tablas, filas, ResulSets y Statements

Page 14: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Diferencias

� Estructurales� Granularidad� IdentidadSubtipado

Poca

PPO � desadaptación

nov-08 [email protected] 14

� Subtipado� Asociaciones

� Dinámicas� Navegación� Cacheado� Concurrencia

Grado de dificultad

Mucha

Page 15: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Granularidad: Ejemplo

Address en un atributo de una clase y una clase

PPO � desadaptación � diferencias estructurales

nov-08 [email protected] 15

Page 16: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Granularidad

� En un modelo OO hay varios tipos de clases � Entidades (Entities)

� Tienen identidad propia y participan en relaciones

PPO � desadaptación � diferencias estructurales

nov-08 [email protected] 16

� Value Types� No se necesita conocer su identidad, sólo su valor

� String, Date, Time, Money, Integer, Complex…

� No participan en relaciones, son atributos� Semántica de composición

� Su ciclo de vida está ligado al de la clase

Page 17: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Granularidad

� En la BDD desaparece la distinción:� Todo a una única tabla

� Sí, hay alternativa:

PPO � desadaptación � diferencias estructurales

nov-08 [email protected] 17

� Sí, hay alternativa:� Usar UDT's, objetos definidos por el usuario en la BDD

� Pero se usan muy poco� Están pobremente definidos en los estándares

Page 18: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Subtipos: Ejemplo

PPO � desadaptación � diferencias estructurales

nov-08 [email protected] 18

Page 19: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Subtipos

� En los objetos está en el lenguaje� En el modelo relacional:

� No existe en la mayoría de las BBDD

PPO � desadaptación � diferencias estructurales

nov-08 [email protected] 19

� No existe en la mayoría de las BBDD� En algunas existe pero no es estándar� El programador lo simula con varias estrategias

� No existe el polimorfismo� Una clave se refiere únicamente a una tabla y no a varias

Page 20: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Identidad

� En java � Identidad (a == b)

� dos referencias que apuntan al mismo objeto

PPO � desadaptación � diferencias estructurales

nov-08 [email protected] 20

� dos referencias que apuntan al mismo objeto

� Equivalencia (a.equals(b))� dos objetos que contienen los mismos valores

� En BDD relacional� Dos filas son la misma si tienen la misma clave

Page 21: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Identidad

� Implicaciones en ejecución� Objeto persistente en memoria es una representación de una fila de la BBDD

PPO � desadaptación � diferencias estructurales

nov-08 [email protected] 21

representación de una fila de la BBDD� ¡ Hay 3 identidades !

� ==� equals� Identidad por clave

� representan la misma fila� se comparan las claves primarias

Page 22: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

3 identidades En este caso userA y userB:•No son iguales•No son equivalentes•¡Pero son la misma fila!

PPO � desadaptación � diferencias estructurales

nov-08 [email protected] 22

userA == userB ���� falseuserA.equals(userB) ���� falseuserA.getKey().equals(userB.getKey()) ���� true

Page 23: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Identidad

� Se necesita asociar la identidad Java con la identidad en la Tabla

� equals() debe definirse sobre los datos

PPO � desadaptación � diferencias estructurales

nov-08 [email protected] 23

� equals() debe definirse sobre los datos del objeto

� Varios hilos concurrentes modificando datos hacen que equals() sea distinto

� Problemas con los java.util.Set

Page 24: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Asociaciones

� En Objetos� Navegabilidad

Unidireccional

PPO � desadaptación � diferencias estructurales

nov-08 [email protected] 24

� Unidireccional� Bidireccional

� Cardinalidad� Úníca� Múltiple

� … y visibilidad

Page 25: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Navegavilidad en OO

� Unidireccional� Sólo se mantiene una referencia (sólo un objeto apunta al otro)

PPO � desadaptación � diferencias estructurales

nov-08 [email protected] 25

� Bidireccional� referencias cruzadas� la asociación se debe declarar ¡2 veces!

� Y asignar dos veces

� los lenguajes OO al uso no soportan el concepto de asociación

Page 26: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

PPO � desadaptación � diferencias estructurales

Cardinalidad

� Única� atributo sencillo

� Múltiple

nov-08 [email protected] 26

� Múltiple� colección

� one-to-one� one-to-many� many-to-many

Page 27: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Navegación en OO

� Recorriendo las referencias

� Como aristas de un grafo de objetos

PPO � desadaptación � diferencias estructurales

nov-08 [email protected] 27

� Como aristas de un grafo de objetos

Page 28: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Asociaciones en Relacional

� Mediante claves ajenas� No tienen dirección, no hay navegación

� Se recuperan datos con consultas que

PPO � desadaptación � diferencias estructurales

nov-08 [email protected] 28

� Se recuperan datos con consultas que hacen joins

Page 29: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Cardinalidad en Relacional

� one-to-one

� one-to-many

PPO � desadaptación � diferencias estructurales

nov-08 [email protected] 29

� one-to-many

� many-to-many� hay que meter una tabla de enlace

Page 30: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Diferencias dinámicas

� Generan perdidas de eficiencia� Navegación� Cacheado

PPO � desadaptación

nov-08 [email protected] 30

� Cacheado� Concurrencia

Page 31: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Navegación: Ejemplo

� OO

� SQL

PPO � desadaptación � diferencias dinámicas

nov-08 [email protected] 31

� SQL

Page 32: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Navegación

� En java se recorre un grafo libremente usando las referencias entre objetos.� Todos los objetos en memoria, los limites

PPO � desadaptación � diferencias dinámicas

nov-08 [email protected] 32

� Todos los objetos en memoria, los limites son los del grafo

� En SQL se indica qué JOINS hacer, lo que implica conocer de antemano que recorrido vamos a hacer

Page 33: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Navegación

� Se busca crear la ilusión de que todos los objetos ya están en memoria� Solución: cargar el grafo dinámicamente

PPO � desadaptación � diferencias dinámicas

nov-08 [email protected] 33

� Solución: cargar el grafo dinámicamente según se va recorriendo: lazy loading

� Pero eso puede tener bajo rendimiento� Demasiadas SELECT * FROM …

El problema de las n+1 consultas

Page 34: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

N + 1 Selects, ejemplo

nov-08 [email protected] 34

Page 35: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Navegación + problemas

� Para evitar demasiadas n+1 SELECT� Cargar muchos datos de cada vez �muchos joins

PPO � desadaptación � diferencias dinámicas

nov-08 [email protected] 35

muchos joins� Nuevo problema:

� Se cargan demasiados datos� Se atasca la conexión a la BBDD� La máquina se puede quedar sin memoria

El problema del producto cartesiano

Page 36: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Producto cartesiano, ejemplo

1000 items * 20 bids * 5 images = 100.000 filas!

nov-08 [email protected] 36

1000 items * 20 bids * 5 images = 100.000 filas!

Page 37: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Navegación

� Buscar compromiso adecuado� Estudiar los recorridos al grafo para cada Unidad de trabajo

PPO � desadaptación � diferencias dinámicas

nov-08 [email protected] 37

cada Unidad de trabajo� Cargar sólo lo necesario

� Varias estrategias de fetching� Prefetch� Fetch en batch� Join selecctivos

Page 38: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Cacheado

� Optimiza el rendimiento al reducir el trasiego con la BBDD

� Permite hacer optimizaciones

PPO � desadaptación � diferencias dinámicas

nov-08 [email protected] 38

� Permite hacer optimizaciones� Write-behind delayed� Batch load/update

� ¿Caché por proceso?, ¿por hilo?, ¿por cluster?

Page 39: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Concurrencia

� Varios hilos de ejecución (usuarios) trabajando sobre los mismos datos…� Que pueden estar en caché…

PPO � desadaptación � diferencias dinámicas

nov-08 [email protected] 39

� Que pueden estar en caché…� ¿Como se controlan las transacciones ACID?

� Si ya la base de datos lo sabe hacer

Page 40: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

PPO � desadaptación � diferencias dinámicas

Diferencias: coste

� El dedicado en desarrollo sólo a JDBC en proyectos ronda el 30%, 40%

� El código que se escribe funciona pero es muy farragoso y repetitivo

nov-08 [email protected] 40

muy farragoso y repetitivo� Errores, mal mantenimiento, etc.

� Puede tener problemas de rendimiento igualmente� No todos los programadores somos gurus del SQL y del JDBC

Page 41: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Organización de persistencia en aplicaciones OO

Page 42: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Arquitecturas en capas

� Ayuda a confinar el código dedicado a persistencia haciendo la

PPO � resolución

nov-08 [email protected] 42

persistencia haciendo la lógica más independiente

� La capa de persistencia ofrece APIS empleadas desde la de negocio Pero sigue habiendo

dependencia

Page 43: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

SQL/JDBC a mano

� Objetos de la API JDBC:� Connections, Statements, ResultSets, etc.� SQL, procedimientos almacenados, etc.

PPO � resolución

nov-08 [email protected] 43

� Patrón DAO� Recomendable incluso con ORM� Define interfaces de persistencia genéricos independientes de la tecnología

� La persistencia se hace menos intrusiva con la lógica. Hay que escribir los DAOs

Page 44: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Modelo de objetos JDBC

Statement

<crea>

<excuteQuery>

PPO � resolución

nov-08 Alberto M.F.A. [email protected] 44

Connection PreparedStatement

CallableStatement

ResultSet

Page 45: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Serialización

� Demasiado básico:� Persiste grafos completos� No se pueden hacer consultas

PPO � resolución

nov-08 [email protected] 45

� El grafo entero debe volver a memoria para ser tratado

� ¿Como se soporta la concurrencia?

� XML mapping (una variación)� Las BBDD XML ofrecen más cosas pero te pueden exponer a otro salto de paradigma: object/hierarquical

Page 46: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Serialización, ejemplo java

nov-08 [email protected] 46

Page 47: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Bases de datos OO

� Podrían estar bien pero...� No tienen el grado de aceptación de las BBDD relacionales en el mercado

PPO � resolución

nov-08 [email protected] 47

BBDD relacionales en el mercado� No tienen el grado de estandarización� Las BBDDOO se adaptan a los lenguajes y por lo tanto no permiten fácilmente la interoperabilidad del SQL

Page 48: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Object/Relational Mapping

� Persistencia automática y transparente a objetos Java en BBDD relacionales� con ciertas cargas de rendimiento� y mínima intrusividad en el código

PPO � resolución

nov-08 [email protected] 48

� y mínima intrusividad en el código� Ventajas

� Soporta concurrencia� Ofrecen lenguajes de consultas OO� Tiene en cuenta el estado del arte actual (BBDD relacionales)

� Se programa pensando en objetos� No es necesario escribir JDBC

Page 49: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Object/Relational Mapping

Page 50: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Componentes de un ORM

� API para CRUD� Lenguaje o API para hacer consultas� Metadatos

PPO � mapeadores ORM

nov-08 [email protected] 50

� Metadatos� Técnicas/políticas configurables para la interacción objeto/relacional� Cacheado� Fetching� Transaciones

Page 51: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Clasificación de los ORM

� Pure relational� Procedimientos almacenados� Gestión del SQL directa� Apto para pequeñas aplicaciones (pocas tablas)� Problemas de mantenibilidad

PPO � mapeadores ORM

nov-08 [email protected] 51

� Problemas de mantenibilidad� Light object mapping

� Clases mapeadas directamente a tablas� SQL se oculta tras patrones (DAO) o en clases abstractas

� Medium� Aplicación diseñada alrededor de un modelo de objetos� SQL generado o soportado por un framework en runtime� Se soportan asociaciones y lenguajes de consultas OO� Puede ser hecho a mano

Page 52: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Clasificación de los ORM(2)

� Full� Semántica de Composición� Herencia

PPO � mapeadores ORM

nov-08 [email protected] 52

� Herencia� Polimorfismo� Persistencia por alcanzabilidad� Persistencia transparente� Estrategias de fetching� Muy complejos para hacerlos a mano

Curiosidad: Hibernate 80.000 LOC + 25.000 LOC test

Page 53: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Problemas genéricos en ORM� Transparencia� Metadatos� Identidad� Jerarquías de herencia

PPO � mapeadores ORM

nov-08 [email protected] 53

� Jerarquías de herencia� Interacción en runtime� Ciclo de vida de los obj. Persistentes� Recuperación de asociaciones� Consultas� Transacciones y concurrencia� Cacheado

Page 54: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

PPO � mapeadores ORM

Transparencia

� ¿Clase JAVA normal (POJO) ?...� Plain Old/Ordinary Java Objects

� ¿O debe heredar de alguna otra clase o

nov-08 [email protected] 54

� ¿O debe heredar de alguna otra clase o implementar algún interfaz?

� ¿Se debe adoptar algún convenio de nombrado?

Page 55: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

PPO � mapeadores ORM

Metadatos

� Se necesitan para aportar información que no hay en el lenguaje referente a la persistencia:� Tablas, conexiones, claves, políticas de fetching, caché, etc.

nov-08 [email protected] 55

caché, etc.

� En forma de XML, anotationsanotations ((1.5, JPA)1.5, JPA), properties

� Calidad de los metadatos� Concisión� ¿Valores por defecto con sentido común?

Page 56: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Jerarquías de herencia

� Hay varias estrategias� ¿Se soportan asociaciones polimórficas, clases abstractas e interfaces?

PPO � mapeadores ORM

nov-08 [email protected] 56

clases abstractas e interfaces?

Page 57: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Interacción en runtime

� Generación de código en compilación� Pasos de precompilación

� Runtime reflection

PPO � mapeadores ORM

nov-08 [email protected] 57

� Runtime reflection� Runtime bytecode generation� Buildtime byte code enhacement

� Instrumentación de código

Page 58: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Beneficios de usar un ORM

� Productividad� Se escribe menos código, con menos errores

� Mantenibilidad< LOC

PPO � mapeadores ORM

nov-08 [email protected] 58

� < LOC� Modelos del dominio son OO, se piensa en objetos

� Rendimiento� Bastante eficiente, muy optimizado� Posibilidad de ejecutar código malo de cualquier forma

� Independencia de la BBDD

Page 59: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Soluciones ORM

� Estándares� EJB 3.0

� EJB 2.1, 2.0, 1.1, 1.0 no son POJOS JPA (subespecificación de EJB 3.0 para

PPO � mapeadores ORM

nov-08 [email protected] 59

� JPA (subespecificación de EJB 3.0 para persistencia)

� Nativas� Hibernate 1.x, 2.x, 3.3.1 (nov 2008)� TopLink� Etc.

Page 60: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

EJB3.0

� Especificación para java en entorno industrial. Código se ejecuta en servidor de aplicaciones.

PPO � mapeadores ORM

nov-08 [email protected] 60

de aplicaciones.� Contempla muchos servicios

� JNDI� Remoteness� Transacciones distribuidas� Persistencia…

Hibernate es el motor de persistencia en JBoss AS 4.0

Page 61: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

Hibernate: Relational Persistence for Java and .NET

PPO � mapeadores ORM

nov-08 [email protected] 61

http://www.hibernate.org/

Page 62: Persistencia para Objetos - di002.edv.uniovi.esdi002.edv.uniovi.es/~alberto_mfa/?download=1. Persistencia en OO.p… · Generación automática de código PPO persistencia nov-08

PPO � mapeadores ORM

Referencias

� Libro

� http://www.hibernate.org

Java persistence with HibernateChistian Bauer y Gaving KingManningISBN: 1-932394-88-5

nov-08 [email protected] 62

� http://www.hibernate.org

� Base de datos para ejercicios� http://www.hsqldb.org