Download 16. Capa de Persistencia
Document related concepts
no text concepts found
Transcript
Capa de Persistencia Daniel Fernández Lanvin www.dflanvin.com/docencia/arquitectura Capa de Persistencia Responsabilidades 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. Daniel Fernández Lanvin www.dflanvin.com/docencia/arquitectura Posibles Alternativas Capa de EJBs de entidad Beans normales de acceso a datos Framework de persistencia mapeo O/R Conjunto de conectores a otros sistemas Back BMPs CMPs Ej. JCO o Business Connector para el acceso a SAP y BIW. Integración con sistemas LEGACY Soluciones Híbridas de las anteriores. Daniel Fernández Lanvin www.dflanvin.com/docencia/arquitectura Capa de persistencia EJBs de Entidad CMP Container Managed Persistence El programador no se preocupa de las SQLs NEGOCIO HELPER HELPER HELPER HELPER EEJBCMP EEJBCMP EEJBCMP EEJBCMP ACCESO A DATOS MySQL Daniel Fernández Lanvin www.dflanvin.com/docencia/arquitectura Capa de persistencia EJBs de Entidad BMP Bean Managed Persistence El programador debe desarrollar las SQLs NEGOCIO HELPER HELPER HELPER HELPER EEJBBMP EEJBBMP EEJBBMP EEJBBMP ACCESO A DATOS SQLProvider MySQL Daniel Fernández Lanvin Statements.xml www.dflanvin.com/docencia/arquitectura Capa de persistencia Beans Acceso a Datos Beans java que ejecutan sentencias SQL contra el motor de persistencia NEGOCIO HELPER DTO HELPER DTO Session EJB SSL DBBean HELPER DTO HELPER DTO Session EJB SSL Session EJB SSL DBBean DBBean Session EJB SSL ACCESO A DATOS DBBean SQLProvider MySQL Daniel Fernández Lanvin Statements.xml www.dflanvin.com/docencia/arquitectura Capa de persistencia Framework 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 Daniel Fernández Lanvin www.dflanvin.com/docencia/arquitectura Pool de Conexiones 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: El cliente obtiene una referencia al pool 2. Obtiene del pool una conexión abierta 3. Ejecuta la sentencia SQL 4. Devuelve la conexión al pool para que sea reutilizada sin ser cerrada 1. Los Pools de conexiones NO SON SOLO PARA BBDD. Ej: Pool JCO de SAP Daniel Fernández Lanvin www.dflanvin.com/docencia/arquitectura Piloto con Pool 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(); Daniel Fernández Lanvin www.dflanvin.com/docencia/arquitectura 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). Daniel Fernández Lanvin www.dflanvin.com/docencia/arquitectura SQLProvider Proveedor 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 Daniel Fernández Lanvin www.dflanvin.com/docencia/arquitectura Piloto con SQLProvider 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 SQL ps=con.prepareStatement( SQLProvider.getInstance().getSentence(SQL_ID)); Daniel Fernández Lanvin www.dflanvin.com/docencia/arquitectura 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. Daniel Fernández Lanvin www.dflanvin.com/docencia/arquitectura Referencias URLs http://jakarta.apache.org/Struts http://theserverside.com Libros Mastering Tomcat Development de WILEY Java Server Programming J2EE Edition de Wrox Daniel Fernández Lanvin www.dflanvin.com/docencia/arquitectura