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