Arquitectura Web en Aplicaciones Empresariales JavafJ2EE www.dflanvin.comfdocenciafarquitectura Capa de Persistencia Daniel Fernandez Lanvin Arquitectura Web en Aplicaciones Empresariales JavafJ2EE www.dflanvin.comfdocenciafarquitectura Capa de Persistencia Responsabilidades Ofrece servicios de persistencia y recuperacin de informacin a las capas superiores: Servicios de lgica de persistencia Ej. insertar cliente", insertar factura", etc. !ndependiente de la capa de negocio. 2 Daniel Fernandez Lanvin Arquitectura Web en Aplicaciones Empresariales JavafJ2EE www.dflanvin.comfdocenciafarquitectura Posibles Alternativas Capa de EJBs de entidad BNPs CNPs Beans normales de acceso a datos Framework de persistencia mapeo OfR Conjunto de conectores a otros sistemas Back Ej. JCO o Business Connector para el acceso a SAP y B!W. !ntegracin con sistemas LEGACY Soluciones Hibridas de las anteriores. Daniel Fernandez Lanvin Arquitectura Web en Aplicaciones Empresariales JavafJ2EE www.dflanvin.comfdocenciafarquitectura Capa de persistencia EJBs de Entidad CNP Container Nanaged Persistence El programador no se preocupa de las SQLs NLGOClO ACCL5O A DA1O5 MySQL EEJBCMP EEJBCMP EEJBCMP EEJBCMP HELPER HELPER HELPER HELPER 3 Daniel Fernandez Lanvin Arquitectura Web en Aplicaciones Empresariales JavafJ2EE www.dflanvin.comfdocenciafarquitectura Capa de persistencia EJBs de Entidad BNP NLGOClO ACCL5O A DA1O5 MySQL EEJBBMP EEJBBMP EEJBBMP EEJBBMP HELPER HELPER HELPER HELPER 5qLPov1de 5qLPov1de 5qLPov1de 5qLPov1de Statements.xml Bean Nanaged Persistence El programador debe desarrollar las SQLs Daniel Fernandez Lanvin Arquitectura Web en Aplicaciones Empresariales JavafJ2EE www.dflanvin.comfdocenciafarquitectura Capa de persistencia Beans Acceso a Datos Beans java que ejecutan sentencias SQL contra el motor de persistencia NLGOClO ACCL5O A DA1O5 MySQL 5ess1on LJ8 55L HELPER HELPER HELPER HELPER 5qLPov1de 5qLPov1de 5qLPov1de 5qLPov1de 5fafemenfs.xm1 5fafemenfs.xm1 5fafemenfs.xm1 5fafemenfs.xm1 DBBean DBBean DBBean DBBean DTO DTO DTO DTO 5ess1on LJ8 55L 5ess1on LJ8 55L 5ess1on LJ8 55L 4 Daniel Fernandez Lanvin Arquitectura Web en Aplicaciones Empresariales JavafJ2EE www.dflanvin.comfdocenciafarquitectura Capa de persistencia Framework de Persistencia Herramientas de Napeo ObjetofRelacional Pueden estar basadas, entre otras cosas, en EJBs de entidad Fama de bajo rendimiento Desarrollo rapido de aplicaciones Aplicaciones portables a otras bases de datos, siempre y cuando sean contempladas por el framework aplicado. Ej: Hibernate Framework Daniel Fernandez Lanvin Arquitectura Web en Aplicaciones Empresariales JavafJ2EE www.dflanvin.comfdocenciafarquitectura Pool de Conexiones Tcnica destinada a gestionar y reutilizar objetos. Crear objetos Connection es una de las operaciones mas caras -> Abrir y cerrar conexin por cada consulta es muy costoso. Gestin adecuada de las conexiones de la base de datos Un solo usuario de base de datos para todos los usuarios de la aplicacin web -> una sola licencia. Funcionamiento pool conexiones estandar: 1. El cliente obtiene una referencia al pool 2. Obtiene del pool una conexin abierta 3. Ejecuta la sentencia SQL +. Devuelve la conexin al pool para que sea reutilizada sin ser cerrada Los Pools de conexiones NO SON SOLO PARA BBDD. Ej: Pool JCO de SAP 5 Daniel Fernandez Lanvin Arquitectura Web en Aplicaciones Empresariales JavafJ2EE www.dflanvin.comfdocenciafarquitectura Piloto con Pool de Conexiones Trabajo 11.0. Pasos: Dar de alta el pool de conexiones en TONCAT Server.xml Nodificar las clases de acceso a datos (xxxDataBean) para que recuperen la conexin 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 Fernandez Lanvin Arquitectura Web en Aplicaciones Empresariales JavafJ2EE www.dflanvin.comfdocenciafarquitectura Externalizacin de SQLs SQL estandar? No existe. Lo mas parecido, SQL 92 Cada proveedor ha personalizado el SQL a su propia base de datos Sentencias basicas son iguales Sentencias optimizadas NO Consecuencia: Las SQLs limitan la portabilidad del sistema. Solucin: Externalizarlas a un fichero XNL. Se limita el impacto de una posible migracin de base de datos a tareas de configuracin Permite hacer tunning mediante creacin de indices, alteracin del modelo, etc. sin necesidad de desarrollar. No siempre es posible (generacin dinamica de SQLs). 6 Daniel Fernandez Lanvin Arquitectura Web en Aplicaciones Empresariales JavafJ2EE www.dflanvin.comfdocenciafarquitectura SQLProvider Proveedor de SQLs Piloto Trabajo 1?.0 !nstancia del patrn Singleton Nos garantiza que slo se instancia una vez Lee una sla 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 Fernandez Lanvin Arquitectura Web en Aplicaciones Empresariales JavafJ2EE www.dflanvin.comfdocenciafarquitectura Piloto con SQLProvider Piloto Trabajo 12.0. Pasos: Crear SQProvider.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 Nodificar la recuperacin de la sentencia SQL ps=con.prepareStatement( SQLProvider.getInstance().getSentence(SQL_ID)); 7 Daniel Fernandez Lanvin Arquitectura Web en Aplicaciones Empresariales JavafJ2EE www.dflanvin.comfdocenciafarquitectura WorkShop! Adaptar el servicio de persistencia !vA Sobre la versin del piloto 12.0, modificar !vaDataBean para que: Obtenga la conexin del pool de conexiones en lugar de crearla y destruirla en cada operacin de base de datos. Obtenga la SQL del SQLProvider en lugar de tenerla hardcodeada como una constante dentro de la clase. Daniel Fernandez Lanvin Arquitectura Web en Aplicaciones Empresariales JavafJ2EE www.dflanvin.comfdocenciafarquitectura Referencias URLs http:ffjakarta.apache.orgfStruts http:fftheserverside.com Libros Nastering Tomcat Development de W!LEY Java Server Programming J2EE Edition de Wrox