Persistenza di oggetti

Transcript

Persistenza di oggetti
A PS
Luca Cabibbo
Analisi e
Progettazione del
Software
Persistenza di oggetti
Luca Cabibbo
aprile 2004
1
A PS
Persistenza di oggetti
Luca Cabibbo
Motivazioni e contenuti
Contesto
§ applicazioni sviluppate mediante le moderne tecniche di
OOA/OOD/OOP
§ che devono gestire dati persistenti/condivisi/transazionali
Linguaggi e modelli di riferimento
§ UML e Java
§ basi di dati relazionali
Contenuti
§ alcune tecnologie per la gestione di oggetti
persistenti/condivisi/transazionali
§ alcuni problemi metodologici rilevanti
2
Persistenza di oggetti
Luca Cabibbo
1
A PS
Premessa – sviluppo iterativo del software
Discipline (attività) nello sviluppo del software
§ analisi dei requisiti
§ analisi
§ progettazione
§ implementazione
§ test
§ altre – rilascio, manutenzione, gestione del progetto, …
Organizzazione delle attività
§ in fasi, iterazioni e discipline (UP)
3
A PS
Persistenza di oggetti
Luca Cabibbo
Analisi e progettazione (OO)
Analisi
§ investigazione del problema – che cosa
§ analisi OO – identificazione e descrizione degli oggetti
(concetti) nel dominio del problema
Progettazione
§ identificazione di una soluzione concettuale che soddisfa i
requisiti – come
§ progettazione OO – definizione e caratterizzazione degli
oggetti software e delle loro collaborazioni
Programmazione
4
Persistenza di oggetti
Luca Cabibbo
2
A PS
5
A PS
6
Architettura a tre livelli ed enfasi dell’OOA/D
Persistenza di oggetti
Luca Cabibbo
Analisi – modello di dominio
Persistenza di oggetti
Luca Cabibbo
3
A PS
7
A PS
8
Progettazione – diagramma delle classi di progetto
Persistenza di oggetti
Luca Cabibbo
Progettazione – design patterns (regole di sconto)
Persistenza di oggetti
Luca Cabibbo
4
A PS
9
A PS
10
Progettazione – design patterns (collegamento con la UI)
Persistenza di oggetti
Luca Cabibbo
Architettura a strati
Persistenza di oggetti
Luca Cabibbo
5
A PS
Gestione della persistenza
I sistemi informatici richiedono solitamente di gestire alcuni
dati in modo persistente – nonché condiviso e transazionale
§ in una applicazione a oggetti, è necessario rendere
persistenti alcuni oggetti di alcune classi
§ chiamiamo classi persistenti le classi i cui oggetti
vanno resi persistenti
§ spesso, classi della logica applicativa ispirate alle classi
concettuali
Diversi modi per realizzare la persistenza degli oggetti
§ una base di dati a oggetti, una base di dati relazionale o un
insieme di file
§ siamo interessati principalmente persistenza di oggetti
mediante basi di dati relazionali
11
A PS
Persistenza di oggetti
Luca Cabibbo
Alcuni problemi
Ci sono alcuni problemi legati al voler gestire oggetti
persistenti mediante una basi di dati relazionale
§ impedance mismatch
§ differenza tra modello relazionale e modello a oggetti
§ “disaccoppiamento” nelle competenze degli sviluppatori e
nelle metodologie
§ sviluppatore OO – una applicazione, sviluppo iterativo e
incrementale, uso di skill dell’OOA/D, oggetti persistenti
e oggetti transienti, …
§ sviluppatore BD – dati persistenti, transazionali e
condivisi (tra più applicazioni), normalizzazione, …
12
Persistenza di oggetti
Luca Cabibbo
6
A PS
Il punto di vista degli sviluppatori
Lo sviluppatore OO
Lo sviluppatore BD
13
A PS
Persistenza di oggetti
Luca Cabibbo
Il problema in esame
Consideriamo questo problema
§ ci sono alcune classi persistenti
§ c’è una base di dati relazionale
§ dove devo scrivere il codice per realizzare la persistenza
degli oggetti?
14
Persistenza di oggetti
Luca Cabibbo
7
A PS
Una possibile soluzione
Una prima soluzione – rendere persistente una classe
scrivendo direttamente il codice SQL (JDBC) dentro la classe
stessa
Prodotto
SQL
base di dati
Vendita
SQL
logica applicativa
§ contro:
coesione, accoppiamento, separazione degli
interessi, riuso
15
A PS
Persistenza di oggetti
Luca Cabibbo
Separazione degli interessi
Il principio di progettazione per la separazione degli
interessi suggerisce
§ la logica applicativa va realizzata, per quanto possibile, in
modo indipendente dalla gestione della persistenza dei dati
§ per Layers: accoppiamento basso dalla logica
applicativa al gestore della persistenza
§ la persistenza dei dati va realizzata mediante un modulo
apposito
§ possibilmente di uso generale e indipendente dalla
logica applicativa
16
Persistenza di oggetti
Luca Cabibbo
8
A PS
Una seconda soluzione
Una seconda soluzione – scrivere il codice SQL in apposite
classi di supporto (data classes) alle classi persistenti
Prodotto
ProdottoDB
SQL
base di dati
Vendita
VenditaDB
SQL
logica applicativa
data classes
§ Pure Fabrication,
17
Indirection, PV
Persistenza di oggetti
A PS
Luca Cabibbo
Soluzione basata su un persistence layer
Una ulteriore soluzione – delegare la gestione della
persistenza degli oggetti ad un modulo apposito – un
persistence layer (PL)
§ un PL nasconde i dettagli della persistenza (nonché della
condivisione e della transazionalità) al programmatore
Prodotto
Persistence
Manager
SQL
base di dati
Vendita
persistence layer
logica applicativa
18
Persistenza di oggetti
Luca Cabibbo
9
A PS
Uso di un persistence layer
Esistono diversi persistence layer che possono essere
utilizzati mediante delle API standard
§ ad es., compatibili con le API ODMG – utilizzate per
accedere le basi di dati a oggetti
§ in pratica, il programmatore vede il gestore della
persistenza come una base di dati a oggetti, anche se
l’implementazione della persistenza è diversa
PersistenceManager pm = new PersistenceManager(...);
Transaction tx = pm.currentTransaction();
PersonaID pID = new PersonaID("1");
Persona p = (Persona) pm.getObjectByID(pID);
p.setStipendio(1000);
tx.commit();
19
A PS
Persistenza di oggetti
Luca Cabibbo
Gestione trasparente della persistenza
Un persistence layer nasconde al programmatore i dettagli di
come gli oggetti vengono resi persistenti
§ due approcci principali
§ O/R mapping – forward engineering
§ R/O mapping – reverse engineering
§ un terzo approccio
§ meet in the middle
20
Persistenza di oggetti
Luca Cabibbo
10
A PS
O/R mapping – forward engineering
Nell’O/R mapping
§ il programmatore indica in un file di configurazione quali
sono le classi che vanno rese persistenti
§ a partire da questo file
§ viene generata la base di dati
§ vengono generate le data classes per le classi
persistenti
§ le classi persistenti vengono “migliorate” da un postcompilatore (enhancer) che stabilisce la cooperazione
tra classi persistenti e data classes
21
A PS
Persistenza di oggetti
Luca Cabibbo
R/O mapping – reverse engineering
Nell’R/O mapping
§ il programmatore indica in un file di configurazione la base
di dati relazionale di interesse
§ a partire da questo file
§ vengono generate le data classes per accedere e
modificare le tuple delle relazioni della base di dati
§ il programmatore rende persistente le proprie classi
facendole cooperare (esplicitamente) con le data classes
22
Persistenza di oggetti
Luca Cabibbo
11
A PS
Meet in the middle
Meet in the middle – incontro al centro
§ le classi persistenti e la base di dati vengono progettate e
realizzate in modo indipendente
§ il programmatore indica in un file di configurazione le
corrispondenze tra classi persistenti e base di dati
§ a partire da questo file
§ vengono generate le data classes per le classi
persistenti
§ le classi persistenti vengono “migliorate” da un postcompilatore (enhancer) che stabilisce la cooperazione
tra classi persistenti e data classes
23
A PS
Persistenza di oggetti
Luca Cabibbo
Discussione
L’O/R mapping è utile in fase di prototipazione
§ non è accettabile se la base di dati va condivisa da più
applicazioni sviluppate in modo indipendente
L’R/O mapping è utile se la base di dati è stabile
§ non è accettabile se la base di dati varia continuamente,
ad esempio perché la si sta progettando
Meet in the middle è la soluzione più flessibile
§ cambiamenti nelle classi persistenti e/o nella base di dati
richiedono solo il cambiamento del file di configurazione
§ indipendenza logica dell’applicazione dalla base di dati
§ poche realizzazioni – spesso incomplete
24
Persistenza di oggetti
Luca Cabibbo
12
A PS
Standard e sistemi
JDO – Java Data Objects – http://www.jdocentral.com/
§ API Java standard per la persistenza trasparente degli
oggetti
OJB – ObJect relational Bridge – http://db.apache.org/ojb/
§ uno strumento per l’O/R mapping + meet in the middle
§ compatibile con le API ODMG e JDO
Torque – http://db.apache.org/torque/
§ uno strumento per l’R/O mapping
Enterprise Java Bean – EJB, parte di J2EE
Altro
§ JRELAY – http://www.objectindustries.com/
§ JDX – http://www.softwaretree.com
E i produttori di RDBMS?
25
A PS
Persistenza di oggetti
Luca Cabibbo
Esempio: Lettura di un prodotto con OJB
Lettura di un prodotto, a partire dal suo codice itemID
Criteria crit = new Criteria();
crit.addEqualTo("id", (String) itemID);
Query q = QueryFactory.newQuery(
ProductSpecification.class, crit);
ProductSpecification p = null;
try {
p = (ProductSpecification)
pm.getObjectByQuery(q);
} catch(Exception e) {
...
}
26
Persistenza di oggetti
Luca Cabibbo
13
A PS
Esempio: Lettura di un prodotto con Torque
Lettura di un prodotto, a partire dal suo codice itemID
try {
pos.torque.Productspecification tp =
ProductspecificationPeer.
retrieveByPK((String) itemID);
ProductSpecification p =
new ProductSpecification(
tp.getItemId();
tp.getDescription();
new Money(tp.getPrice()) );
} catch(Exception e) {
...
}
27
A PS
Persistenza di oggetti
Luca Cabibbo
Gestione della persistenza
Una possibile metodologia
§ identifica i cluster di oggetti che vanno acceduti
congiuntamente
§ ProductSpecification, Sale-SaleLineItem, …
§ identifica le operazioni di interesse per ciascun cluster di
oggetti
§ tra le operazioni CRUD – creazione (inserimento),
lettura, aggiornamento, cancellazione
§ definisci una interfaccia per ciascun cluster di oggetti, che
dichiara le operazioni di interesse
§ ISalePersistenceAdapter , …
§ implementa questa interfaccia con classi adattatore per i
vari possibili gestori della persistenza
§ TorqueSalePersistenceAdapter , …
28
Persistenza di oggetti
Luca Cabibbo
14
A PS
Collegamento con la logica applicativa
Creazione
§ bisogna creare una famiglia di adattatori compatibili – per i
vari cluster e lo specifico gestore della persistenza
§ AbstractFactory, Singleton
Uso
class Store {
...
public void registerSale(Sale s) {
PersistenceManagerFactory.getInstance().
getSalePersistenceAdapter().saveSale(s);
}
...
}
29
A PS
Persistenza di oggetti
Luca Cabibbo
Design pattern utili – J2EE patterns
Value Object
§ usa un Value Object che incapsula i dati di un oggetto di
business (della logica applicativa)
§ tra i vari elementi e strati, scambia il Value Object e non
l’oggetto di business originale
Composite Entity
§ usa una Composite Entity per rappresentare e gestire un
gruppo di oggetti persistenti correlati – anziché
rappresentarli mediante elementi persistenti a grana fine
§ un oggetto Composite Entity rappresenta un grafo di
oggetti persistenti
30
Persistenza di oggetti
Luca Cabibbo
15
A PS
Design pattern utili – J2EE patterns
Data Access Object
§ usa un Data Access Object (DAO) per astrarre e
incapsulare tutti gli accessi alle sorgenti dei dati persistenti
§ il DAO gestisce le connessioni con le sorgenti di dati per
ottenere e memorizzare dati
§ può essere utile definire un DAO per ciascuna
Composite Entity
§ il DAO può scambiare oggetti che sono Value Object
§ per ogni sorgente di dati diversa va implementato un
gruppo di DAO diversi
§ la creazione dei DAO per la sorgente di dati
effettivamente utilizzata può essere creata con una
Abstract Factory
31
A PS
Persistenza di oggetti
Luca Cabibbo
Un’altra tecnologia – EJB
Gli Enterprise Java Beans (EJB) sono componenti Java
riusabili che implementano logica applicativa e abilitano lo
sviluppo di applicazioni distribuite basate su componenti
§ gli EJB sono oggetti software che
§ vivono nell’ambito di un application server (AS), usato
da contenitore di EJB
§ possono essere acceduti remotamente tramite l’AS
Tre tipologie di EJB (ciascuno con le sue varianti)
§ session bean – per implementare servizi (azioni) da
eseguire per conto del cliente
§ message-driven bean – per implementare servizi asincroni
§ entity bean – oggetti persistenti e transazionali utilizzati per
rappresentare dati (entità nel senso del modello ER)
32
Persistenza di oggetti
Luca Cabibbo
16
A PS
Entity bean
Due tipi di entity bean
§ entity bean la cui persistenza è delegata completamente al
contenitore (AS) che ospita il bean (CMP)
§ va implementata solo la logica applicativa
§ entity bean la cui persistenza è gestita esplicitamente dal
bean (BMP)
§ oltre alla logica applicativa, vanno implementati metodi
di supporto alla persistenza ma indipendenti dalla logica
applicativa – ejbCreate(), ejbLoad(), ejbStore(),
ejbRemove()
§ è comunque compito del contenitore decidere quando e
come invocare questi metodi di supporto alla
persistenza
§ è compito del contenitore anche gestire le transazioni
33
A PS
Persistenza di oggetti
Luca Cabibbo
Conclusioni
Gli sviluppatori di applicazioni a oggetti vogliono rendere
persistenti i loro oggetti nel modo più efficiente (mediante una
base di dati relazionale) ed efficace possibile
§ vogliono ignorare quanto più possibile le problematiche
legate alla persistenza degli oggetti
§ progettazione ed evoluzione della base di dati, SQL,
JDBC, gestione delle transazioni, caching di oggetti
persistenti, …
§ da queste esigenze nascono gli strumenti di supporto alla
gestione trasparente della persistenza di oggetti
34
Persistenza di oggetti
Luca Cabibbo
17
A PS
Tesine e tesi
Tesine (da 5 crediti)
§ sperimentazione/confronto di strumenti per la gestione
trasparente della persistenza
§ sviluppo di un generatore di classi DAO (in coppia)
Tesi
§ studio di modelli per la gestione trasparente della
persistenza di oggetti di tipo meet in the middle
§ realizzazione di uno strumento per la gestione trasparente
della persistenza di tipo meet in the middle
§ sviluppo di un generatore di classi DAO
§ database refactoring
§ database testing
35
Persistenza di oggetti
Luca Cabibbo
18