Download Apache Struts
Document related concepts
no text concepts found
Transcript
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
negocio.
de la capa de
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.
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
MySQL
ACCESO A
DATOS
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
Statements.xml
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
Statements.xml
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
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
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();
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).
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
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
ps=con.prepareStatement(
SQLProvider.getInstance().getSentence(SQL_ID));
SQL
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