1 IMPLEMENTAZIONE TECNOLOGIE:HIBERNATE & JAVA RMI TECNOLOGIE – HIBERNATE & JAVA RMI 2 Hibernate: Object-Relational Mapping • piattaforma middleware open source che fornisce un servizio di Object-Relational mapping (ORM) per lo sviluppo di applicazioni Java • • Consiste di una tecnica per la mappatura della struttura di oggetti Java su di un database relazionale Fornisce un’interfaccia Object-Oriented per la persistenza degli oggetti, nascondendo la logica relazionale sottostante 3 TECNOLOGIE – HIBERNATE & JAVA RMI Hibernate: Object-Relational Mapping • Architettura Middleware • L’applicazione costruisce la sua SessionFactory • La SessionFactory costruisce e gestisce Sessioni, oggetti leggeri facade verso gli strati sottostanti • La Sessione costruisce Transazioni e gli oggetti necessari al querying TECNOLOGIE – HIBERNATE & JAVA RMI 4 Hibernate: Object-Relational Mapping • Fase di setup: • Installazione R-DBMS, definizione DB e utente con privilegi • Inclusione delle librerie Hibernate (rel. 4.1) • Definizione file hibernate.cfg.xml con i parametri di connessione al DBMS e la lista dei files di mapping • Definizione file .hbm.xml per ogni classe persistente(best practice) • • Definisce la mappatura effettiva attributo-colonna Una classe di utility per l’inizializzazione della SessionFactory • • Costruisce l’oggetto SessionFactory composto Dichiara un’interfaccia facade per il sistema verso persistenza TECNOLOGIE – HIBERNATE & JAVA RMI 5 Hibernate: Object-Relational Mapping • XML che definisce i parametri per la costruzione della SessionFactory TECNOLOGIE – HIBERNATE & JAVA RMI 6 Hibernate: Object-Relational Mapping • Mappatura della classe POJO su tabella relazionale TECNOLOGIE – HIBERNATE & JAVA RMI 7 Hibernate: Object-Relational Mapping Mappatura dell’ereditarietà di tipo “Table Per Class” • • • • Un’unica tabella per mappare l’intera gerarchia di classi I campi della tabella mappano l’unione degli attributi delle classi della gerarchia Un campo Discriminator determina la classe di appartenenza dell’oggetto mappato nel relativo record TECNOLOGIE – HIBERNATE & JAVA RMI 8 Hibernate: Object-Relational Mapping • La classe Facade Persistence • • • • Classe Singleton per la visibilità Costruisce la SessionFactory all’interno del costruttore, richiamato al primo accesso al metodo getInstance() Dichiara un’intercaccia Facade per la nostra applicazione verso le principali funzionalità dello strato di persistenza Può essere interpretata come una classe Adapter, in quanto rappresenta un livello di indirezione rispetto all’interfaccia del livello sottostante TECNOLOGIE – HIBERNATE & JAVA RMI 9 Hibernate: Object-Relational Mapping • Features adottate: HQL • • • Linguaggio di interrogazione ispirato ad SQL Classi anziché Tabelle Oggetti anziché Campi TECNOLOGIE – HIBERNATE & JAVA RMI 10 Hibernate: Object-Relational Mapping • Features adottate: Queries polimorfiche • “from java.lang.Object” • Recupera tutti gli oggetti della classe Object e della sue sottoclassi, presenti in persistenza. Abbiamo quindi tutti gli oggetti nel DB • • • • “from model.Noleggio” Recupera gli oggetti delle classi Noleggio e Prenotazione “from model.Noleggio where Discriminator=‘Prenotazione’” Recupera i soli oggetti della classe Prenotazione TECNOLOGIE – HIBERNATE & JAVA RMI 11 Hibernate: Object-Relational Mapping • Features adottate: Queries by Criteria Hibernate offre una API di interrogazione integralmente basata su paradigma ad oggetti