Professional Documents
Culture Documents
26/04/2007
DAI
Contenido
z
z
z
z
z
z
z
z
Definicin.
Arquitectura.
Driver.
Conexin.
Consultas.
Transacciones
Transacciones.
Pool de conexiones.
Patrn DAO.
Curso 2006/2007
26/04/2007
JDBC
z
z
z
z
Curso 2006/2007
JDBC
z
Curso 2006/2007
26/04/2007
Arquitectura
ResultSet
Statement Statement
Statement
Connection
Connection
Aplicacin
DriverManager
Driver
Driver
JVM
Access
Curso 2006/2007
Oracle
Driver
z
z
Curso 2006/2007
26/04/2007
Driver
z
z
z
z
Curso 2006/2007
Conexin
z
z
Curso 2006/2007
26/04/2007
DataSource
z
z
z
Curso 2006/2007
Consultas SQL
z
z
z
10
Curso 2006/2007
26/04/2007
Statement
z
11
Curso 2006/2007
ResultSet
z
12
Curso 2006/2007
26/04/2007
ResultSet
z
13
NUMERIC
DECIMAL
BIT
TINYINT
SMALLINT
INTEGER
BIGINT
REAL
FLOAT
DOUBLE
BINARY
VARBINARY
DATE
TIME
TIMESTAMP
14
Mtodo de Acceso
String getString()
String getString()
InputStream
getAsciiStream()
getUnicodeString()
java.math.BigDecimal
getBigDecimal()
java.math.BigDecimal
getBigDecimal()
boolean getBoolean()
byte getByte()
short getShort()
int getInt()
l
long
getLong()
tL
()
float getFloat()
double getDouble()
double getDouble()
byte[] getBytes()
InputStream
getBinayStream()
java.sql.Date getDate()
java.sql.Time getTime()
java.sql.TimeStamp
getTimeStamp()
Curso 2006/2007
26/04/2007
PreparedStatement
z
15
PreparedStatement
z
16
26/04/2007
Transacciones
z
z
17
Curso 2006/2007
Nivel de Aislamiento
Transaccional
z
18
Niveles de aislamiento:
TRANSACTION_NONE:
z Sin soporte transaccional.
TRANSACTION_READ_UNCOMMITED:
z Permite lecturas sobre datos no comprometidos.
TRANSACTION_READ_COMMITED:
z Permite lecturas slo sobre datos comprometidos.
z Nivel por defecto.
TRANSACTION_REPEATABLE_READ.
z Bloquea los datos ledos.
TRANSACTION_SERIALIZABLE.
z Slo una transaccin al mismo tiempo.
Suelen estar disponibles read commited y serializable.
Curso 2006/2007
26/04/2007
Concurrencia
z
19
20
Motivacin:
Mltiples conexiones simultneas a la base de datos.
El establecimiento de una conexin es costoso.
Consecuencia:
Definir cuidadosamente las transacciones.
Establecer algn mecanismo para optimizar el uso de
conexiones Pool de Conexiones
Pool de Conexiones:
Habitualmente implementado por los DataSource.
Curso 2006/2007
10
26/04/2007
Pool de Conexiones
z
z
21
ConnectionPool - Estructura
< < In t e rf ac e > >
C o n n e c tio n
+ c o n e xio n
1
c re a te S ta te m e n t() : S ta te m e n t
p re p a re S ta te m e n t(c o n s u lta : S trin g ) : P re p a re d S ta te m e n t
c lo s e ()
...()
g e tC o n n e c tio n () : C o n n e c ti o n
C o n n e c t io n W ra p p e r
c re a te S ta te m e n t() : S ta te m e n t
p re p a re S ta te m e n t(( c o n s u lta : S trin g ) : P re p a re d S ta te m e n t
c lo s e ()
...()
C o n n e c t io n P o o l
+ pool
*
g e tC o n n e c tio n ( ) : C o n n e c tio n
r etu
t rn C o n n e ctio
ti n (c
( : C o n n e c ti
tio n P o o l)
< < s ta ti c> > ge t In s ta n c e () : D a ta S o u rc e
<<us es >>
22
Curso 2006/2007
11
26/04/2007
Patrn DAO
z
Motivacin:
Almacenar y recuperar informacin persistente de diferentes
fuentes: bases de datos relacionales, LDAP, XML, etc.
Las APIs para el acceso a datos son muy diferentes.
La portabilidad y mantenimiento de los componentes (servlets,
EJB, ...) se ve limitada.
Solucin:
Usar un objeto DAO (Data Access Object) que abstraiga y
encapsule el acceso a la fuente de datos.
El DAO gestiona la conexin con la fuente de datos para obtener y
almacenar la informacin.
23
Curso 2006/2007
Colaboracin
ServletEdicion
Participantes:
dao : DAOCliente
getClienteByUsuario(usuario)
c : Cliente
Fuente de
datos
return c
Objeto de negocio
DAO
ValueObject
Fuente de datos
Curso 2006/2007
getNombre()
Accede a los
datos
setCorreo( correo)
updateCliente(c)
d t Cli t ( )
getNombre()
Recupera la
informacin
Actualiza los datos
24
12
26/04/2007
Estrategia de Implementacin
Basada en los patrones Abstract Factory y Factory Method.
Pasos:
z
z
25
Curso 2006/2007
Factora Abstracta
z
26
Curso 2006/2007
13
26/04/2007
Factora Concreta
z
27
Curso 2006/2007
Clase DAO
z
28
Curso 2006/2007
return c;
}
14
26/04/2007
Estructura
DAOFactoria
getClienteDAO() : ClienteDAO
getProductoDAO() : ProductoDAO
<<static>> getDAOFactoria() : DAOFactoria
AccessDAOFactoria
XMLDAOFactoria
getClienteDAO() : ClienteDAO
getProductoDAO() : ProductoDAO
getClienteDAO() : ClienteDAO
getProductoDAO() : ProductoDAO
<<create>>
<<create>>
AccessClienteDAO
AccessProductoDAO
<<Interface>>
ClienteDAO
<<Interface>>
ProductoDAO
create() : Cliente
findAll() : Collection
findByUsuario() : Cliente
update()
29
Curso 2006/2007
Consecuencias
30
Beneficios:
Favorece la transparencia.
Facilita la migracin de los componentes.
Reduce la complejidad del cdigo.
Centraliza todo el acceso a datos en una capa.
Inconvenientes:
Diseo de una jerarqua de clases.
Introduce una nueva capa.
Curso 2006/2007
15