Sunteți pe pagina 1din 22

Patrones de persistencia

Ingenierí
Ingeniería del Software II
Ingeniería en Informática
Escuela Superior de Informática de Ciudad Real
Macario Polo, Ismael Caballero
Curso 2009/2010
Apuntes v1.0

Prácticas ISoft2 Curso 09/10 1


Objetos persistentes
 Los objetos persistentes son aquellos que
requieren almacenamiento persistente; es
decir, son aquellos objetos que tienen que
seguir viviendo después de apagones del
sistema.
 En general, son objetos que se almacenarán
en ficheros, bases de datos, etc.

2
Ideas fundamentales
 Correspondencia entre esquema de clases y
esquema de tablas (páginas 109 y siguientes
del Manual de la asignatura)
 Identidad del objeto (≈clave principal)
 Asignación de responsabilidades de
persistencia
 Materialización y desmaterialización
 Uso de cachés
◦ Tipos de cachés
◦ Objetos sucios y limpios
◦ Commit y rollback

3
Correspondencia entre esquema de clases y
esquema de tablas: Patró
Patrón 1 clase, 1 tabla
 Se construye una tabla por cada clase en el
diagrama de clases
 Asociaciones, agregaciones y composiciones
se transforman a relaciones de clave externa
con la multiplicidad indicada por la propia
multiplicidad de la asociación
 Las relaciones de herencia se transforman a
relaciones de clave externa con multiplicidad
1:1, realizándose una propagación de clave

4
Correspondencia entre esquema de clases y
esquema de tablas: Patró
Patrón 1 clase, 1 tabla

5
6
Correspondencia entre …: Patró
Patrón 1 árbol de
herencia, 1 tabla
 Se construye una tabla por cada árbol de
herencia que exista en el diagrama de clases
 Cada tabla procedente de un árbol de
herencia incluye una columna por cada
campo en la jerarquía representada
 Puesto que en la tabla se van a almacenar
instancias de diferentes subtipos, habrá
columnas que permanezcan desaprovechadas

7
8
Correspondencia entre …: Patró
Patrón 1
camino de herencia, 1 tabla
 Se construye una tabla por cada rama del
árbol de herencia
 La casuística puede ser muy variada, en
función fundamentalmente de la presencia o
ausencia de clases abstractas

9
10
Asignació
Asignación de responsabilidades
de persistencia: operaciones CRUD
 De alguna manera, el sistema debe permitir
que los objetos persistentes gestionen la
correspondencia de su estado en memoria
principal y en memoria secundaria
 Los objetos persistentes deben poder ser
insertados, eliminados, actualizados.
 Se trata de las operaciones CRUD (Create,
Read, Update y Delete)

11
Operaciones CRUD
 Create ≈ insert
 Read ≈ select
 Update ≈ update
 Delete ≈ delete

 En general, los cambios de estado en el objeto se


reflejarán con una llamada a update
 Según el patrón experto, las CRUD se ubicarán en la
propia clase
 Según el fabricación pura, crearemos una FP para
delegar las responsabilidades de persistencia

12
Operaciones CRUD: experto
public Empleado(String numeroSS) throws Exception
{
String SQL="Select * from Empleados where NumeroDeSeguridadSocial=’” +
numeroSS + “’”;
Connection bd=null;
try {
bd=DriverManager.getConnection("BDPersonas");
ResultSet r=bd.createStatement().executeQuery(SQL);
if (r.next())
{
apellidos=r.getString("Apellidos");
empresa=r.getString("Empresa");
estatura=r.getFloat("Estatura");
fechaDeNacimiento=r.getDate("FechaDeNacimiento");
nombre=r.getString("Nombre");
numeroDeSeguridadSocial=r.getString("NumeroDeSeguridadSocial");
peso=r.getFloat("Peso");
fechaDeContratacion=r.getDate("FechaDeContratacion");
} else throw new Exception("No se encuentra el registro");
}
catch (Exception ex)
{
throw new Exception("Error al leer el registro " + ex.getMessage());
}
finally
{
bd.close();
}
}

13
Operaciones CRUD: Fabricació
Fabricación
pura
public void insert() throws Exception
{
PersistEmpleado.insert(this);
}

14
Un diseñ
diseño alternativo

Esa Connection puede sustituirse


por un Agente (Broker).
El Agente gestiona las conexiones
con el SGBD, las entrega a quien lo
necesita, carga los drivers de acceso
a la base de datos, etc.

15
Alternativas de implementació
implementación
 Construimos las sentencias SQL
(concatenando valores) y las enviamos a
ejecutar (chapucilla)
◦ Usamos el PreparedStatement de Java
 Construimos sentencias SQL parametrizadas
(más elegante, más eficiente)
◦ Usamos el PreparedStatement, al que pasamos
parámetros
 Si el SGBD lo permite, utilizamos
procedimientos almacenados
◦ Objeto CallableStatement de Java

16
Un proc.
proc. alm. en SQL Server

17
Un proc.
proc. alm. en SQL Server
public void update() throws SQLException {
CallableStatement cs=null;
try {
Connection bd=Agente.getAgente().getDB();
cs=bd.prepareCall("{call guardarParking (?, ?, ?)}");
cs.setString(1, this.casilla.getCiudad());
cs.setString(2, this.casilla.getVersion());
cs.setInt(3, this.casilla.getPos());
cs.executeUpdate();
}
catch (SQLException ex) { throw ex; }
finally { cs.close(); }
}

18
Objetos de java.sql
 Los resultados, los recogemos y procesamos
con un objeto ResultSet
 De forma general, es conveniente cerrar
todos los objetos que vayamos utilizando en
cada conexión salvo, quizás, la conexión

19
Un posible Agente, que ademá
además es
Singleton
package persistencia;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Agente {
protected static Agente mInstancia=null;
protected Connection mBD;
protected String mURL=
"jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=Monoploy";

protected Agente() throws SQLException, ClassNotFoundException {


Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
mBD=DriverManager.getConnection(mURL,
"administrador","admin");
}

public static Agente getAgente() throws SQLException, ClassNotFoundException {


if (mInstancia==null)
mInstancia=new Agente();
return mInstancia;
}

public Connection getBD() throws SQLException {


if (mBD.isClosed())
mBD=DriverManager.getConnection(mURL,
"administrador","admin");
return mBD;
}
}

20
Cachés (pág. 100 apuntes
Caché
antiguos)
 Las cachés se utilizan para almacenar temporalmente
objetos
 De vez en cuando, se sincronizan los objetos de las
cachés con sus registros correspondientes de la base
de datos
 La gestión de las cachés se le asigna a una clase
determinada
 Puede haber varios tipos de cachés:
◦ New Clean Caché
◦ Old Clean Caché
◦ New Dirty Caché
◦ Old Dirty Caché
◦ New Delete Caché
◦ Old Delete Caché

21
Cachés (pág. 100 apuntes antiguos)
Caché

22

S-ar putea să vă placă și