Capa de Persistencia
description
Transcript of Capa de Persistencia
www.dflanvin.com/docencia/arquitectura
Daniel Fernández Lanvin
Capa dePersistencia
www.dflanvin.com/docencia/arquitectura
Daniel Fernández Lanvin
Capa de PersistenciaResponsabilidades
Ofrece servicios de persistencia y recuperación de información a las capas superiores: Servicios de lógica de persistencia Ej. “insertar cliente”, “insertar factura”, etc.
Independiente de la capa de negocio.
www.dflanvin.com/docencia/arquitectura
Daniel Fernández Lanvin
PosiblesAlternativas
Capa de EJBs de entidad BMPs CMPs
Beans normales de acceso a datos Framework de persistencia mapeo O/R Conjunto de conectores a otros sistemas Back
Ej. JCO o Business Connector para el acceso a SAP y BIW.
Integración con sistemas LEGACY Soluciones Híbridas de las anteriores.
www.dflanvin.com/docencia/arquitectura
Daniel Fernández Lanvin
Capa de persistenciaEJBs de Entidad CMP
Container Managed Persistence El programador no se preocupa de las SQLs
NEGOCIO
ACCESO ADATOS
MySQL
EEJBCMP EEJBCMP EEJBCMP EEJBCMP
HELPER HELPER HELPERHELPER
www.dflanvin.com/docencia/arquitectura
Daniel Fernández Lanvin
Capa de persistenciaEJBs de Entidad BMP
NEGOCIO
ACCESO ADATOS
MySQL
EEJBBMP EEJBBMP EEJBBMP EEJBBMP
HELPER HELPER HELPERHELPER
SQLProvider
Statements.xml
Bean Managed Persistence El programador debe desarrollar las SQLs
www.dflanvin.com/docencia/arquitectura
Daniel Fernández Lanvin
Capa de persistenciaBeans Acceso a Datos
Beans java que ejecutan sentencias SQL contra el motor de persistencia
NEGOCIO
ACCESO ADATOS
MySQL
Session EJB SSL
HELPER HELPER HELPERHELPER
SQLProvider
Statements.xml
DBBeanDBBean DBBean DBBean
DTO DTODTODTO
Session EJB SSL
Session EJB SSL
Session EJB SSL
www.dflanvin.com/docencia/arquitectura
Daniel Fernández Lanvin
Capa de persistenciaFramework de Persistencia
Herramientas de Mapeo Objeto/Relacional Pueden estar basadas, entre otras cosas, en
EJBs de entidad Fama de bajo rendimiento Desarrollo rápido de aplicaciones Aplicaciones portables a otras bases de datos,
siempre y cuando sean contempladas por el framework aplicado.
Ej: Hibernate Framework
www.dflanvin.com/docencia/arquitectura
Daniel Fernández Lanvin
Pool deConexiones Técnica destinada a gestionar y reutilizar objetos. Crear objetos Connection es una de las operaciones más
caras -> Abrir y cerrar conexión por cada consulta es muy costoso.
Gestión adecuada de las conexiones de la base de datos Un solo usuario de base de datos para todos los usuarios
de la aplicación web -> una sola licencia. Funcionamiento pool conexiones estándar:
1. El cliente obtiene una referencia al pool2. Obtiene del pool una conexión abierta3. Ejecuta la sentencia SQL4. Devuelve la conexión al pool para que sea reutilizada sin
ser cerrada Los Pools de conexiones NO SON SOLO PARA BBDD. Ej:
Pool JCO de SAP
www.dflanvin.com/docencia/arquitectura
Daniel Fernández Lanvin
Piloto conPool de Conexiones
Trabajo 11.0. Pasos: Dar de alta el pool de conexiones en TOMCAT
Server.xml Modificar las clases de acceso a datos
(xxxDataBean) para que recuperen la conexión del pool en lugar de abrirla y cerrarla
Context ctx = new InitialContext(); if(ctx == null ) throw new Exception("Boom - No Context");
DataSource ds = (DataSource)ctx.lookup(
"java:comp/env/jdbc/AmazinDB");
if (ds != null) con = ds.getConnection();
www.dflanvin.com/docencia/arquitectura
Daniel Fernández Lanvin
Externalización de SQLs
SQL estándar? No existe. Lo más parecido, SQL 92 Cada proveedor ha personalizado el SQL a su propia
base de datos Sentencias básicas son iguales Sentencias optimizadas NO
Consecuencia: Las SQLs limitan la portabilidad del sistema.
Solución: Externalizarlas a un fichero XML. Se limita el impacto de una posible migración de base de
datos a tareas de configuración Permite hacer tunning mediante creación de índices,
alteración del modelo, etc. sin necesidad de desarrollar. No siempre es posible (generación dinámica de SQLs).
www.dflanvin.com/docencia/arquitectura
Daniel Fernández Lanvin
SQLProviderProveedor de SQLs
Piloto Trabajo 12.0 Instancia del patrón Singleton
Nos garantiza que sólo se instancia una vez Lee una sóla vez las sentencias SQL del
fichero y las mantiene en memoria. Se recarga a cada arranque del sistema Permite modificar las SQLs sin necesidad de
Programar Recompilar Repaquetizar Redesplegar
www.dflanvin.com/docencia/arquitectura
Daniel Fernández Lanvin
Piloto conSQLProvider
Piloto Trabajo 12.0. Pasos: Crear SQLProvider.java Crear sentencias.xml y colocarlo en el classpath<?xml version="1.0" encoding="UTF-8"?>
<jenial-sql-statements>
<sql>
<id>libro.selectAll</id>
<statement>select * from libro</statement>
</sql>
</jenial-sql-statements
Modificar la recuperación de la sentencia SQLps=con.prepareStatement(
SQLProvider.getInstance().getSentence(SQL_ID));
www.dflanvin.com/docencia/arquitectura
Daniel Fernández Lanvin
WorkShop!Adaptar el servicio de persistencia IVA
Sobre la versión del piloto 12.0, modificar IvaDataBean para que: Obtenga la conexión del pool de
conexiones en lugar de crearla y destruirla en cada operación de base de datos.
Obtenga la SQL del SQLProvider en lugar de tenerla hardcodeada como una constante dentro de la clase.
www.dflanvin.com/docencia/arquitectura
Daniel Fernández Lanvin
Referencias
URLs http://jakarta.apache.org/Struts http://theserverside.com
Libros Mastering Tomcat Development de WILEY Java Server Programming J2EE Edition de Wrox