Hibernate
Introduzione a
Hibernate3
Dott. Doria Mauro
[email protected]
[email protected]
Cos’è un framework
E’ un’insieme di componenti software che:
–
–
–
Adottare un framework significa :
–
–
2
fornisce l’impalcatura per lo sviluppo di applicazioni
detta i requisiti del funzionamento dei nuovi componenti
gestisce la loro interazione
ATTENERSI ad un’architettura
(cioè estendere classi e/o implementare interfacce e/o
configurare)
ASPETTARE che il framework invochi le nostre classi,
secondo il Principio di Hollywood
“don’t call us,
us, we call you
you””
[email protected]
Cos’è un ORM framework
Un framework ORM mira ad offrire una soluzione completa alla
gestione della persistenza (nel nostro caso in Java)
Scopo di un framework ORM:
–
–
–
Effetti collaterali:
–
–
3
Mediazione tra strato business e database: gestione automatica e
trasparente della persistenza tra oggetti Java e tabelle del database.
Uso di metadati (XML) per la descrizione del mapping
Astrarre l’applicazione dallo strato JDBC/SQL
Abbassamento generale delle performance a run-time
Gestione e manutenzione dei metadati (formato XML)
NOTA: questi aspetti negativi sono di gran lunga inferiori a quelli derivati
da una gestione manuale della persistenza con JDBC
[email protected]
Elementi di un ORM framework
Un framework ORM si compone da quattro elementi di
base:
–
–
–
–
4
Un set di API per le operazioni CRUD sugli oggetti delle
classi persistenti
Un set di API o un linguaggio per effettuare query sulle classi
e sulle proprietà delle classi
Uno strumento per definire i metadati di mapping tra classi e
tabelle
Tecniche di ottimizzazione come il dirty checking e le lazy
association fetching
[email protected]
Vantaggi
5
I vantaggi principali nell’utilizzare un ORM framework sono:
– Produttività: ridurre significativamente i tempi di sviluppo altrimenti
impiegati in attività manuali di gestione dei dati in SQL e JDBC (fino
al 95% del codice per la persistenza).
–
Manutenibilità: operare una netta separazione tra il modello ad
oggetti e il relazionale e una significativa riduzione della quantità di
codice per la persistenza lo rendono altamente manutenibile.
–
Performance: per quanto la presenza di un motore ORM possa
incidere e che il codice scritto a mano offre le massime
performance, queste vanno valutate a parità di condizioni di tempi e
costi. Inoltre, l’ ORM ottimizza rispetto ai DBMS che si usa.
–
Indipendenza dal vendor: soprattutto grazie al concetto di dialetto, il
codice SQL scompare a favore di tecniche standardizzate che
rendono l’applicazione indipendente dal DBMS.
[email protected]
Hibernate come ORM framework
Hibernate è uno dei framework di maggior successo, le cui
caratteristiche sono:
–
–
–
6
Permette di concentrarsi soltanto sulla business logic
Soluzione non invasiva
Minimo impatto sullo strato business (non sono richieste
particolari soluzioni architetturali per interfacciarsi con
Hibernate)
[email protected]
EJB, JPA e Hibernate
7
Sun rilascia le specifiche della piattaforma EJB 1.0 nel 1998
Nei primi anni del 2000 nonostante le migliorie apportate alla piattaforma
con gli EJB 2.1, la comunità informatica fa pressione per una
miglioramento: la specifica è carente (soprattutto la persistenza)
Sun avvia un’opera di revisione della propria piattaforma EJB e prevede
una nuova versione per l’inizio del 2003 (EJB 3.0).
Sun intende revisionare soprattutto l’aspetto della persistenza creando
delle nuove specifiche (prendendo sunto da soluzioni valide esistenti).
I principali attori protagonisti nella comunità informatica danno il loro
contributo, tra cui molti vendo EJB e gli sviluppatori di Hibernate.
Nasce così la specifica EJB 3.0 e la specifica JPA (Java Persistence API)
[email protected]
EJB 3.0 e JPA
8
Le nuove specifiche degli EJB 3.0 si possono dividere in due
aspetti separati:
1.
Nuove specifiche per i Session Beans e i Message Driven Beans
2.
Nuove specifiche per la persistenza che si compone di classi
Entity (non più Entity beans), metadati di mapping, interfacce per
la gestione della persistenza e un query language.
Questa seconda parte (una sorta di “sottospecifica”) prende il
nome di JPA (Java Persistence API)
Queste due parti sono state pensate in modo da poter utilizzate
separatamente
[email protected]
Java Persistence API
9
Nella nuova specifica JPA sono presenti due fondamentali
aspetti:
1.
L’effettivo JPA engine è completamente “pluggabile”: è possibile
lavorare con il proprio EJB 3.0 container sul proprio Application
Server ma decidere di sostituire il JPA engine.
2.
Il JPA engines deve poter girare senza un particolare container o
ambiente run-time: è possibile utilizzare JPA al di fuori della
piattaforma EJB 3.0
Questo rende le architetture e il codice delle applicazioni molto
più flessibile!
NOTA: gli effettivi JPA engines offrono caratteristiche aggiuntive “proprietarie”
(quindi attenzione all’interscambiabilità tra engines).
[email protected]
JPA e Hibernate
Hibernate implementa le specifiche JPA
Nuovi e interessanti sviluppi si aprono!
10
[email protected]
Introduzione a Hibernate
Il “core” di Hibernate si compone di :
–
–
–
11
API native e definizione dei metadati nei file XML
Un query language chiamato HQL
Interfacce programmatiche per query di tipo Criteria e Example
Vi sono centinaia di opzioni e caratteristiche
E’ la base su cui si poggiano tutti gli altri moduli
Il core di Hibernate non richiede nessun particolare ambiente per
poter girare: basta un collegamento ad un dataSource e le
librerie di Hibernate.
[email protected]
Architettura
12
[email protected]
Le interfacce di Hibernate
Le interfacce principali di Hibernate sono:
–
–
–
–
–
–
–
–
–
13
–
Session
Configuration
SessionFactory
Transaction
Query and Criteria
Core interfaces
Lifecycle
Validatable
Interceptor
Callback interfaces
Type
UserType e CustomType
Type interfaces
[email protected]
Le interfacce di Hibernate
Le core interfaces offrono accesso diretto ai servizi di persistenza
di Hibernate
SessionFactory
–
Configuration
–
14
Rappresenta concettualmente la configurazione per il collegamento
ad uno specifico Database.
Rappresenta un’astrazione della configurazione necessaria all’avvio
di Hibernate. Mette a disposizione le informazioni presenti nei file di
configurazione di Hibernate e nei files di mapping.
[email protected]
Le interfacce di Hibernate
Session
–
Transaction
–
15
Rappresenta un’ astrazione del gestore delle transazioni. Rende
trasparente il sistema scelto per le transazioni garantendo massima
portabilità.
Query
–
Rappresenta un’astrazione del servizio di persistenza. Si occupa del
ciclo di persistenza degli oggetti e del loro trasferimento dal DB alla
memoria e viceversa
Rappresenta un’astrazione di una query Hibernate
Criteria
–
Consente la gestione di query attraverso una logica OOP applicando
criteri e filtri.
[email protected]
Le interfacce di Hibernate
Le interfacce di callback: consentono di gestire attraverso dei
metodi di callback la notifica di particolari eventi che occorrono
nella applicazione.
Hibernate invoca i metodi delle interfacce di callback a fronte di
determinati eventi
Lifecycle:
–
Validatable:
–
16
Notifica gli eventi legati al ciclo di vita degli oggetti.
Notifica l’intenzione di effettuare operazioni di update in modo da
consentire l’effettuazione di controlli di validità.
Interceptor:
–
Notifica l’ accesso e la modifica alle proprietà degli oggetti.
[email protected]
Le interfacce di Hibernate
Le type interfaces consentono di accedere ai tipi predefiniti di
Hibernate o creare dei tipi personalizzati
Type
–
UserType e CustomType
–
17
Rappresenta un’astrazione di un tipo di dato per la mappatura da
tipo java a tipo di colonna nello specifico DB
Consentono la creazione di tipi personalizzati dall’utente
[email protected]
Extension interfaces
Hibernate permette di configurare molte delle sue caratteristiche
attraverso diverse interfacce:
–
–
–
–
–
–
–
–
18
IdentifierGenerator
Dialect
Cache and CacheProvider
ConnectionProvider
TransactionFactory, Transaction, and TransactionManagerLookup
ClassPersister
PropertyAccessor
ProxyFactory
[email protected]
Annotazioni
19
Con il rilascio della JDK5.0, viene introdotta una nuova tecnica
per definire i metadati di una applicazione: le annotations
Hibernate supporta (a partire la JDK5.0) le annotazioni,
consentendo di sostituire o integrare la configurazione basata sui
file XML.
Le annotazioni di Hibernate implementano lo standard JPA;
esiste poi una gruppo di annotazioni “extended” non standard e
specifiche per Hibernate.
[email protected]
Domande?
ORM framework
EJB 3.0
Java Persistence API
Entity class
Mappings
20
Annotations
Type
CRUD
Hibernate Query Language