to get the file

Anuncio
Desarrollo
de
Sistemas
de
Información
Tema
5.
Arquitectura
de
las
aplicaciones
con
acceso
a
BD
Marta
Elena
Zorrilla
Pantaleón
DPTO.
DE
MATEMÁTICAS,
ESTADÍSTICA
Y
COMPUTACIÓN
Este
tema
se
publica
bajo
Licencia:
CreaIve
Commons
BY‐NC‐SA
3.0
R EFERENCIAS
2
 
UC‐Marta
Zorrilla
Libros
  ScoO
W.
Ambler.
The
Design
of
a
Robust
Persistence
Layer
For
RelaIonal
Databases.
2005
hOp://www.ambysoZ.com/
downloads/persistenceLayer.pdf
  Clinton
Begin,
Brandon
Goodin,
Larry
Meadors.
iBaIs
in
acIon.
New
York:
Manning,
cop.
2007.
  César
de
la
Torre
et
al.
Guía
de
Arquitectura
N‐Capas
DDD
.NET
4.0.
Krassis
Press,
2011
R EFERENCIAS
3
 
Recursos
web
 
 
 
ComparaIva
Frameworks:
hOp://crowdranking.com/crowdrankings/t420g0‐‐best‐java‐
persistence‐frameworks
 
Data
Skills
for
Agile
SoZware
Developer
hOp://www.agiledata.org/essays/developerSkills.html
 
EncapsulaIng
Database
Access:
An
Agile
"Best"
PracIce
hOp://www.agiledata.org/essays/implementaIonStrategies.html
ScoO
Ambler's
ArIcles
and
Other
WriIngs
hOp://www.ambysoZ.com/onlineWriIngs.html
Comparison
and
Benchmarks
on
ORMBaOle.NET
hOp://ormeter.net/
 
 
UC‐Marta
Zorrilla
iBaIs
hOp://ibaIs.apache.org/
Hibernate
hOp://www.hibernate.org/
I NTRODUCCIÓN
4
UC‐Marta
Zorrilla
 
Mayoritariamente,
los
Sistemas
de
Información
hacen
uso
de
bases
de
datos
relacionales
para
la
persistencia
de
sus
datos.
En
menor
medida
se
usan
BD
orientadas
a
objeto
y/u
Objeto‐relacionales.
Y
está
tomando
relevancia
las
BD
XML,
como
consecuencia
del
intercambio
de
datos
y
estándares
de
la
industria.
 
SQL,
estándar
desde
1987,
es
el
lenguaje
de
interrogación
y
definición
ampliamente
adoptado.
Ha
sido
extendido
para
abordar
el
modelado
de
los
datos
objetual
(OR)
y
semi‐
estruturado
(XML).
En
vigor,
estándar
SQL:2008.
 
Limitaciones:
sólo
una
parte
de
SQL
es
realmente
estándar
cuando
trabajas
con
disIntos
gestores
de
BD
 
A
favor:
declaraIvo,
potente,
ampliamente
uIlizado
I NTRODUCCIÓN
5
 
Por
otra
parte,
los
sistemas
de
información
se
ven
muy
afectados
por
los
cambios
normaIvos
y
organizaIvos
de
las
corporaciones,
lo
que
conlleva
a
cambios
en
los
requisitos
y
conInuas
adaptaciones
en
el
soZware.
 
Paralelamente
las
tecnologías
no
paran
de
avanzar
y
de
proponer
gran
canIdad
de
alternaIvas
que
permiten
construir
aplicaciones,
que
siguiendo
una
arquitectura
modular,
se
adapten
muy
bien
a
diferentes
escenarios.
 
¿Cómo
abordarlo?
 
UC‐Marta
Zorrilla
Analicemos
la
historia
R EVISIÓN
6
Ges=ón
de
datos
Ges=ón
de
datos
Ges=ón
de
datos
Ges=ón
de
datos
Procesamiento
Procesamiento
Procesamiento
Procesamiento
Presentación
Presentación
HISTÓRICA
Ges=ón
de
datos
Ges=ón
de
datos
Persistencia
Procesamiento
Presentación
UC‐Marta
Zorrilla
Presentación
Procesamiento
Procesamiento
Presentación
Presentación
Presentación
Desde
los
años
80
hasta
la
actualidad
la
arquitectura
de
las
aplicaciones
se
ha
ido
modificando
pasando
desde
una
arquitectura
centralizada
(todo
en
el
host)
a
una
distribuida,
en
el
que
se
reparte
el
aplicaIvo
en
varias
máquinas
(cliente
y
servidores)
aprovechando
así
las
capacidades
gráficas
y
de
cómputo
de
cada
Ipo
de
equipo
L AYERS
7
UC‐Marta
Zorrilla
AND
T IERS
 
Es
importante
disInguir
los
conceptos
de
“Capas”
(Layers)
y
“Niveles”
(Tiers)
 
Las
Capas
(Layers)
se
ocupan
de
la
división
lógica
de
los
componentes
que
consItuyen
el
soZware,
y
no
Ienen
en
cuenta
dónde
estará
ubicados
vsicamente.
 
Los
Niveles
(Tiers)
se
refieren
a
los
disIntos
equipos
en
donde
los
componentes
soZware
se
desplegarán.
 
Ambos
usan
nombres
similares
(presentación,
proceso/
servicio,
negocio
y
datos),
pero
es
importante
no
confundirlos.
C ARACTERÍSTICAS
8
 
 
UC‐Marta
Zorrilla
DE LAS APLICACIONES
Aplicaciones
centralizadas
(1
Ier)
(desde
1970
a
..):
 
Interfaces
orientadas
a
texto
 
Desarrollado
principalmente
con
Cobol,
y
lenguajes
4GL
que
embebían
el
lenguaje
SQL
del
gestor
de
BD
(Informix‐4GL,
Oracle,
etc.)
 
Aplicaciones
eficientes,
ágiles,
pero
poco
usables
2
Ier
(1990‐95):
 
Interfaces
gráficas
en
cliente
con
capacidad
de
procesamiento.
 
Se
basaba
en
la
invocación
de
instrucciones
SQL
desde
cliente.
A
veces
estas
instrucciones
eran
procedimientos
almacenados
que,
incluían
no
sólo
el
SQL
sino
también
lógica
de
negocio.
Se
llevaba
todo
el
cómputo
al
servidor.
 
Recordemos
que
los
procedimientos
almacenados
siguen
lenguaje
procedimental
y
no
declaraIvo.
Impide
portabilidad.
 
Las
aplicaciones
presentaban
problemas
de
escalabilidad
y
rendimiento
y
su
despliegue
era
una
locura
“el
infierno
de
las
dlls”
 
Herramientas:
VB,
PowerBuilder,
Oracle
Forms,…
con
API
ODBC.
Prob.
Con
el
pool
de
conexiones
C ARACTERÍSTICAS
9
 
3‐Ier
o
N‐Ier
(1994‐…):
 
 
 
 
 
 
UC‐Marta
Zorrilla
DE LAS APLICACIONES
Interfaces
“thin”
y
“thick”
Surgen
con
la
llegada
de
Internet
y
el
protocolo
hOp.
Se
divide
la
aplicación
en
capa
de
presentación,
de
negocio
y
de
datos.
Los
procedimientos
almacenados
se
llevan
a
la
capa
de
negocios
(como
llamadas
a
procedimientos
remotos)
donde
se
mejora
el
rendimiento
con
una
gesIón
más
opImizada
del
pool
de
conexiones
y
los
recursos
de
gestor.
Estos
son
muy
eficientes
en
cuanto
a
que
manipulan
la
información
que
está
en
el
propio
gestor
pero
son
más
divciles
de
escribir
y
probar
pues
no
están
ligados
a
las
metodologías
soZware
actuales
(orientadas
a
objetos
vistos
desde
la
perspecIva
de
aplicación).
Algunos
gestores
ya
permiten
la
programación
de
procedimientos
en
java
o
C#
pero
es
un
parche
que
solo
resuelve
la
portabilidad
de
la
BD.
C ARACTERÍSTICAS
10
 
3‐Ier
o
N‐Ier
(1994‐…):
 
 
UC‐Marta
Zorrilla
DE LAS APLICACIONES
Inline
SQL:
a
conInuación
aparecieron
lenguajes
como
SQLJ
(estandarizado
en
SQL2003)
que
embebía
instrucciones
SQL
en
java
pero
no
ha
sido
muy
uIlizado.
 
SQL
no
estándar
y,
por
tanto,
no
se
puede
hacer
un
parser
general
 
Necesidad
de
un
precompilador
 
Dificultad
para
integrarlo
en
los
IDE
de
desarrollo
Dynamic
SQL:
resuelve
el
problema
del
precompilador,
escribiendo
el
SQL
en
un
string.
Esto
requiere
una
API
para
configurar
los
parámetros
y
recuperar
los
datos
(
JDBC,
ADO
Net)
 
Ventaja:
flexibilidad
para
construir
dinámicamente
las
SQLs
 
Inconveniente:
mucho
código
repeIIvo
cada
vez
que
quieres
ejecutar
una
consulta.
Además
el
SQL
puede
venir
concatenado
lo
que
resulta
divcil
de
leer
y
mantener
E J . SQLJ
11
SQLJ
estándar
estático
JDBC
no estándar
dinámico
UC‐Marta
Zorrilla
Y
JDBC
#sql [ctx] {
SELECT MAX(SALARY), AVG(SALARY)
INTO :maxSalary, :avgSalary
FROM DSN8710.EMP
};
PreparedStatement stmt = conn.prepareStatement(
"SELECT MAX(SALARY), AVG(SALARY)“ +
" FROM DSN8710.EMP");
rs = stmt.executeQuery();
if (!rs.next()) { // Error -- no rows found }
maxSalary = rs.getBigDecimal(1);
avgSalary = rs.getBigDecimal(2);
if (rs.next()) { // Error -- more than one row found }
rs.close();
stmt.close();
C ARACTERÍSTICAS
12
 
3‐Ier
o
N‐Ier
(1994‐…):
 
 
 
 
Actualmente,
la
solución
adoptada
es
diseñar
una
capa
que
realice
el
mapeo
objeto‐relacional.
Sus
siglas
ORM
se
refieren
al
mapeo
de
objetos
del
soZware
de
aplicación
a
relaciones
o
tupas
del
modelo
relacional
para
su
persistencia
y
recuperación
posterior.
Su
uso
se
exIende
también
a
otras
tecnologías
no
relacionales
(BD
XML,
ficheros,
etc.)
Ventajas:
 
 
UC‐Marta
Zorrilla
DE LAS APLICACIONES
Muchas
herramientas
ORM
generan
código
SQL
directamente,
realizan
convenientemente
la
gesIón
de
transacciones,
ofrecen
posibilidades
de
caching
Algunas,
están
diseñadas
con
ciertas
reglas
que
obligan
a
que
la
BD
está
normalizada
perfectamente,
lo
que
influye
negaIvamente
en
su
rendimiento.
Muchas
empresas
construyen
su
propio
ORM.
13
UC‐Marta
Zorrilla
A RQUITECTURA L ÓGICA
 
User‐interface
classes
should
not
directly
access
your
persistence
mechanisms.
 
Domain
classes
should
not
directly
access
your
persistence
mechanisms.
 
The
class‐type
architecture
is
orthogonal
to
your
hardware/network
architecture
A RQUITECTURA F ÍSICA
14
Class
type
Stand
Alone
Fat‐client
Thin
–client
N‐=er
User
Interface
Client
Client
Client
Client
Controller/
process
Client
Client
Server
ApplicaIon
server
Domain/
business
Client
Client
Server
ApplicaIon
server
Persistence
Client
Server
Server
Database
Server
System
Client
All
machines
All
machines
All
machines
1
Ier‐
c/s
UC‐Marta
Zorrilla
2
Ier‐
c/s
3
Ier‐
c/s
N ECESIDAD
15
UC‐Marta
Zorrilla
DE LA
C APA
DE
P ERSISTENCIA
 
Persistencia
es
la
capacidad
de
un
lenguaje
de
programación
o
entorno
de
desarrollo
de
programación
para,
almacenar
y
recuperar
el
estado
de
los
objetos
de
forma
que
sobrevivan
a
los
procesos
que
los
manipulan.
 
¿Es
necesaria?
Si,
debido
al
desajuste
de
impedancia
entre
el
modelo
de
datos
de
los
paradigmas
de
programación
orientados
a
objetos
y
el
de
los
gestores
de
bases
de
datos
(relacionales,
OR,
xml,
etc).
Para
el
caso
relacional,
 
Modelo
de
objetos
(objetos
con
atributos,
métodos
y
relaciones
con
otros
objetos)
debe
descomponerse
en
varias
tablas
(de
acuerdo
a
las
relaciones
1:N
y
N:M)
para
almacenarse
y
su
recuperación
requiere
varios
JOINs
 
En
los
gestores
relacionales
el
acceso
es
asociaIvo,
esto
es,
basado
en
el
contenido
(valor
de
clave)
y
no
navegacional,
basado
en
el
movimiento
entre
registros
individuales.
 
Los
gestores
provee
Ipos
de
datos
que
no
Ienen
los
lenguajes
de
programación
OO
(
p.
ej.
Interval,
Date).
R EQUISITOS
16
C UMPLIR
 
La
capa
de
persistencia
encapsula
el
comportamiento
necesario
para
escribir,
recuperar,
actualizar
y
borrar
objetos
(de
la
aplicación
soZware)
a/desde
el
gestor
de
almacenamiento
persistente
(relacional,
XML,
ficheros,
etc.).
 
Esta
debe
soportar,
de
acuerdo
a
ScoO
Ambler
(2005):
 
 
 
 
 
 
UC‐Marta
Zorrilla
A
Diferentes
mecanismos
de
persistencia
(relacional,
XML,
ficheros,
etc.).
Encapsulación
completa:
no
debe
ser
necesario
escribir
ninguna
línea
de
código
que
acceda
al
gestor
de
persistencia,
deben
ser
suficiente
los
métodos
definidos
en
la
capa
de
persistencia
Acciones
sobre
varios
objetos
al
Iempo
(borrar
varios
objetos
o
consultarlos,
etc.)
Transacciones
simples
y
anidadas
(todo
o
nada
o
con
commit
parcial)
Extensibilidad:
fácil
para
susItuir
los
mecanismos
de
persistencia
existentes
y
poder
incorporar
nuevas
caracterísIcas
IdenIdad
de
objetos
persistentes:
la
capa
de
persistencia
debe
asociar
un
idenIficador
a
cada
objeto
persistente
que
sirva
para
localizar
de
forma
unívoca
el
objeto
guardado
en
el
gestor
de
persistencia
R EQUISITOS
17
 
UC‐Marta
Zorrilla
A
C UMPLIR
Esta
debe
soportar
(cont.):
 
Cursores:
debe
poder
recuperar
el
número
de
objetos
que
se
le
pidan
y
evitar
el
manejo
de
volúmenes
grandes
de
datos
 
Proxies:
complementa
al
cursor,
un
objeto
que
representa
a
otro
pero
sin
traerlo
a
memoria
hasta
que
se
solicite
expresamente
 
MúlIples
arquitecturas:
debe
poder
adaptarse
a
cualquier
Ipo
de
arquitectura
(centralizada,
c/s,
n‐capas)
 
Diferentes
gestores:
si
se
produce
un
cambio
de
gestor
las
aplicaciones
no
se
ven
afectadas
 
MúlIples
conexiones:
debe
permiIr
abrir
conexiones
a
diferentes
bases
de
datos
dentro
de
una
misma
aplicación
 
Suporte
a
drivers
naIvos
y
no
naIvos
(JDBC,
ODBC,…)
 
Consultas
SQL:
aunque
se
debe
evitar
el
SQL
en
el
código
OO,
en
ocasiones
es
necesario
por
rendimiento
y
debe
permiIrse.
18
UC‐Marta
Zorrilla
M ECANISMOS
DE
P ERSISTENCIA
ScoO
Ambler,
2005
M ECANISMOS
19
UC‐Marta
Zorrilla
DE
P ERSISTENCIA
 
Acceso
directo
a
BD.
Implica
el
uso
directo
de
la
BD
haciendo
uso
de
una
interfaz
estandarizada
y
un
lenguaje
de
consulta
soportado
por
el
gestor.
No
existe
capa
de
persistencia
entre
el
gestor
y
la
aplicación.
 
Mapeadores:
mecanismos
que
se
basan
en
la
traducción
bidireccional
entre
los
datos
encapsulados
en
los
objetos
de
la
lógica
de
un
Sistema
OO
y
el
modelo
de
datos
de
la
fuente
de
datos.
El
mapeador
es
el
encargado
de
realizar
la
conversión
entre
paradigmas,
bien
de
forma
manual
o
automáIca.
 
Generadores
de
código:
usar
herramientas
generadores
de
código
basadas
en
patrones
para
resolver
la
persistencia,
centrándose
el
desarrollador
en
el
código
que
resuelve
la
lógica
de
negocio.
M ECANISMOS
20
P ERSISTENCIA
 
Orientación
a
aspectos:
paradigma
orientado
a
modularizar
las
aplicaciones
en
determinados
conceptos,
uno
de
ellos
es
la
persistencia
 
Lenguajes
orientados
a
objetos:
uIlizar
funcionalidades
de
persistencia
provistas
por
el
propio
lenguaje
de
programación
evitando
la
inclusión
de
frameworks.
 
 
UC‐Marta
Zorrilla
DE
Librerías
estándar
usando
técnicas
como
la
serialización
de
objetos
(no
gesIona
transacciones
ni
incorpora
lenguajes
de
consulta);
lenguajes
que
provean
persistencia
o
usando
lenguajes
que
integren
un
lenguaje
de
consulta
sobre
el
sistema
persistente
como
OQL,
HQL.
Prevalencia,
técnica
para
hacer
persistentes
los
datos
que
están
en
memoria
ppal.
usando
técnicas
de
serialización.
Manejan
transacciones
y
pueden
recuperar
un
estado
estable
si
cae
el
sistema.
F RAMEWORKS
21
UC‐Marta
Zorrilla
DE
P ERSISTENCIA
 
Framework
es
un
conjunto
de
librerías
o
clases
que
proporciona
una
infraestuctura
que
actúa
de
soporte
para
desarrollar
aplicaciones.
Esto
es,
es
un
esquema
o
patrón
para
el
desarrollo
de
una
aplicación
completa
o
de
una
parte
específica
de
la
misma.
 
Los
frameworks,
a
diferencia
de
un
conjunto
de
librerías,
ofrecen
una
serie
de
servicios
para
implementar
el
artefacto
soZware
ocultando
su
complejidad
al
programador
y
ahorrando
Iempo
de
programación.
Por
otra
parte,
está
más
limitado
un
cambio
en
su
funcionalidad.
 
Framework
de
persistencia
es
un
marco
de
trabajo
que
se
sitúa
entre
la
lógica
de
negocio
y
la
capa
de
base
de
datos,
abstrayendo
uno
del
otro.
F RAMEWORKS
22
 
OpenJPA
is
an
open
source
implementaIon
of
the
Java
Persistence
API
specificaIon.
It
is
an
object‐relaIonal
mapping
(ORM)
soluIon
for
the
Java
language,
which
simplifies
storing
objects
in
databases
EclipseLink
 
UC‐Marta
Zorrilla
Hibernate
is
an
object‐relaIonal
mapping
(ORM)
library
for
the
Java
language,
providing
a
framework
for
mapping
an
object‐oriented
domain
model
to
a
tradiIonal
relaIonal
database.
OpenJPA:
 
 
MyBa=s
is
a
persistence
framework
available
for
Java
and
.NET
that
couples
objects
with
stored
procedures
or
SQL
statements
using
an
XML
descriptor
or
annotaIons.
Hibernate:
 
 
JAVA
IbaIs:
 
 
PARA
EclipseLink
is
the
open
source
Eclipse
Persistence
Services
Project
from
the
Eclipse
FoundaIon.
The
soZware
provides
an
extensible
framework
that
allows
Java
developers
to
interact
with
various
data
services,
including
databases,
web
services,
Object
XML
mapping
(OXM),
and
Enterprise
InformaIon
Systems
(EIS).
EclipseLink
supports
a
number
of
persistence
standards
O TROS
23
  Torque
  JDO
Genie
  Castor
  LiDO
  OJB
  Cayenne
  JDBM
  JDO
Toolkit
  FronIerSuite
  PBeans
  Jrelay
  Simple
ORM
  IntelliBO
  JULP
(Java
Ultra‐Lite
Persistence)
  Smyle
  Speedo
  XORM
  JDBCPersistence
UC‐Marta
Zorrilla
FRAMEWORKS PARA
  kodoJDO
  ….
J AVA
O TROS
24
  Sql
client
  EnIty
Framework
  LINQ
to
SQL
  BTLToolkit
  DataObjects.Net
  LinqConnect
  Nhibernate
  OpenAccesss
  Etc….
UC‐Marta
Zorrilla
FRAMEWORKS PARA
N ET
I B ATIS
25
 
iBaIs
es
un
framework
que
facilita
el
diseño
de
la
capa
de
persistencia
uIlizada
en
las
aplicaciones
Java
para
acceder
a
nuestro
repositorio
de
datos.
 
iBaIs
une
los
Objetos
con
las
sentencias
SQL
mediante
un
descriptor
XML.
iBaIs
necesita
uno
o
más
ficheros
con
las
sentencias
SQL
que
usará
el
programa
 
 
UC‐Marta
Zorrilla
IbaIs
necesita
un
fichero
de
configuración
en
XML
donde
se
indiquen
los
parámetros
de
conexión
a
la
base
de
datos
y
los
ficheros
de
mapeo
XML
H IBERNATE
26
UC‐Marta
Zorrilla
 
Hibernate
es
una
herramienta
de
Mapeo
objeto‐relacional
para
la
plataforma
Java
(y
disponible
también
para
.Net
con
el
nombre
de
NHibernate)
que
facilita
el
mapeo
de
atributos
entre
una
base
de
datos
relacional
tradicional
y
el
modelo
de
objetos
de
una
aplicación,
mediante
archivos
declaraIvos
(XML)
que
permiten
establecer
estas
relaciones.
 
Hibernate
no
requiere
conocer
el
modelo
de
datos
al
cual
se
accede.
Se
Iene
una
aplicación
Orientada
a
Objetos
y
él
mapea
el
diseño
OO
en
una
capa
de
persistencia.
 
La
mayor
diferencia
entre
Hibernate
e
iBATIS
proviene
del
hecho
de
que
el
úlImo
basa
su
funcionamiento
en
el
mapeo
de
sentencias
SQL
que
se
incluyen
en
ficheros
XML.
Eso
significa
que,
al
contrario
que
Hibernate,
requiere
conocimiento
de
SQL
por
parte
del
programador.
Por
otra
parte,
permite
la
opImización
de
las
consultas,
ya
sea
con
lenguaje
estándar
o
con
SQL
propietario
del
motor
de
base
de
datos
uIlizado.
Con
iBATIS,
siempre
se
sabe
lo
que
se
está
ejecutando
en
la
base
de
datos
y
permite
generar
consultas
dinámicas
muy
potentes.
H IBERNATE
27
UC‐Marta
Zorrilla
VS IBATIS
 
Hibernate
facilita
el
desarrollo
al
no
tener
por
que
tener
conocimiento
alguno
acerca
de
SQL,
pero
se
desaconseja
para
desarrollos
en
los
que
la
definición
del
modelo
de
datos
está
ya
definido
o
si
las
relaciones
en
el
modelo
de
datos
van
a
ser
complejas.
 
Por
otra
parte,
Hibernate
al
uIlizar
su
propio
lenguaje
de
consulta
de
datos,
lo
convierte
en
mulImotor
de
base
de
datos.
 
IbaIs
soporta
la
posibilidad
de
almacenar
consultas
en
la
caché
(usa
OpenSymphony
Cache)
y
pool
de
conexiones
(usa
Yacarta).
 
En
definiIva,
Hibernate
separa
más
la
capa
de
negocio
y
persistencia
que
IbaIs
en
la
que
el
desarrollador
“define”
el
enlace
(menos
nivel
de
abstracción).
 
Usaremos
IbaIs
en
las
prácIcas.

Descargar