160 likes | 631 Views
Capa de Persistencia. 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. Posibles Alternativas.
E N D
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.
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.
NEGOCIO HELPER HELPER HELPER HELPER ACCESO A DATOS EEJBCMP EEJBCMP EEJBCMP EEJBCMP MySQL Capa de persistenciaEJBs de Entidad CMP • Container Managed Persistence • El programador no se preocupa de las SQLs
NEGOCIO HELPER HELPER HELPER HELPER ACCESO A DATOS EEJBBMP EEJBBMP EEJBBMP EEJBBMP SQLProvider MySQL Statements.xml Capa de persistenciaEJBs de Entidad BMP • Bean Managed Persistence • El programador debe desarrollar las SQLs
NEGOCIO HELPER HELPER HELPER HELPER DTO DTO DTO DTO ACCESO A DATOS Session EJB SSL Session EJB SSL Session EJB SSL Session EJB SSL DBBean DBBean DBBean DBBean SQLProvider MySQL Statements.xml Capa de persistenciaBeans Acceso a Datos • Beans java que ejecutan sentencias SQL contra el motor de persistencia
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
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: • El cliente obtiene una referencia al pool • Obtiene del pool una conexión abierta • Ejecuta la sentencia SQL • 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
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();
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).
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
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 SQL ps=con.prepareStatement( SQLProvider.getInstance().getSentence(SQL_ID));
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.
Referencias • URLs • http://jakarta.apache.org/Struts • http://theserverside.com • Libros • Mastering Tomcat Development de WILEY • Java Server Programming J2EE Edition de Wrox