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