Configurazione di base. Dott. Doria Mauro doriamauro@gmail.com



Documenti analoghi
Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Architettura MVC-2: i JavaBeans

Università degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web L-A A.A Esercitazione 08 DAO e Hibernate

Progettazione : Design Pattern Creazionali

Approfondimento: Migrazione dei database e backup della posta

Mappare il DB senza XML. Introduzione alle annotation di Hibernate3

Esercitazione 4 JDBC

Progetto: Servizio location based per la ricerca di punti di interesse

Gestione Manutenzioni Immobiliari.

La VPN con il FRITZ!Box Parte I. La VPN con il FRITZ!Box Parte I

TERM TALK. software per la raccolta dati

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

I MODULI Q.A.T. PANORAMICA. La soluzione modulare di gestione del Sistema Qualità Aziendale

PSG Table Builder Manuale Utente. PSG TABLE BUILDER Manuale Utente

Guida all installazione di Easy

Installazione e caratteristiche generali 1

Installazione & Configurazione Php e MySQL su Mac Os X. Php

Porting Su Hostingjava

Gestione Manutenzione Preventiva

Sviluppo Applicazioni Mobile Lezione 12 JDBC. Dr. Paolo Casoto, Ph.D

Utilizzo di Certificati SSL e relative implicazioni

Installazione LINUX 10.0

Il calendario di Windows Vista

WG-TRANSLATE Manuale Utente WG TRANSLATE. Pagina 1 di 15

Appunti di Informatica 1

Manuale d uso della libreria Volta Log

La VPN con il FRITZ!Box Parte I. La VPN con il FRITZ!Box Parte I

Breve introduzione curata da Alessandro Benedetti. Struts2-Introduzione e breve guida

Corso di Informatica Modulo T3 B2 - Database in rete

PROCEDURA DI CHIUSURA ANNO FISCALE 2006 CON E-SHOP

InitZero s.r.l. Via P. Calamandrei, Arezzo

FIRESHOP.NET. Gestione del taglia e colore.

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

S.I.I.P.A.L. Sistema Informativo Integrato Pubblica Amministrazione Locale

Il Web-Service SDMX dell ISTAT

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

1 JSPDynPage, componenti portale e Java Server Pages

STRUMENTI DI PRESENTAZIONE MODULO 6

Progetto ittorario Anno scol

Sviluppo Applicativi personalizzati per automatizzare le Analisi SPC

IPSec VPN Client VPN vs serie ZyWALL con PSK e Certificati digitali

Configuration Managment Configurare EC2 su AWS. Tutorial. Configuration Managment. Configurare il servizio EC2 su AWS. Pagina 1

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base Variabili, operatori e commenti Array...

Registratori di Cassa

Guida all amministrazione VPH Webmin/Virtualmin

Manuale gestione Porta di Dominio OpenSPCoop 1.1

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Blue s Hotel Pro Il software che hai sempre desiderato per il tuo Hotel!

Introduzione. Installare EMAS Logo Generator

IRSplit. Istruzioni d uso 07/10-01 PC

Guida alla redazione del Fascicolo XBRL

Test di unità con JUnit4

Informazioni relative al Decreto legislativo 30 giugno 2003, n Codice in materia di protezione dei dati personali

Software Gestionale per alberghi e strutture ricettive

MANUALE PARCELLA FACILE PLUS INDICE

Introduzione alla consultazione dei log tramite IceWarp Log Analyzer

Guida di Pro Spam Remove

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50

Procedura Gestione Pratiche Sicurezza Cantiere

MANUALE UTENTE. In questo manuale verranno descritte tutte le sue funzioni. Il sistema OTRS è raggiungibile al seguente link:

Gestione delle transazioni. Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 1

NuMa Nuove Manutenzioni. Web Application per la Gestione dell Iter di Manutenzione degli Edifici e del Territorio

Software di interfacciamento sistemi gestionali Manuale di installazione, configurazione ed utilizzo

Il CMS Moka. Giovanni Ciardi Regione Emilia Romagna

5.6.1 REPORT, ESPORTAZIONE DI DATI

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

GUIDA UTENTE BILLIARDS COUNTER (Vers )

P2-11: BOOTP e DHCP (Capitolo 23)

MANUALE DI INSTALLAZIONE

Eclipse e Subversion

Nuova funzione di ricerca del sito WIKA.

Fornitori On Line Manuale Utente. Fornitori On Line Manuale Utente

CHIUSURE di MAGAZZINO di FINE ANNO

Progettazione della componente applicativa

Corso BusinessObjects SUPERVISOR

Corso di Informatica

JDBC. A. Bechini Accesso a DataD con Java

Funzioni in C. Violetta Lonati

Programmazione Java Avanzata Spring - JDBC

Sviluppata da: Lo Russo - Porcelli Pag. 1 di 6 6FRSR utilizzare il DBMS Postgresql per imparare il linguaggio SQL.

Gestione di un magazzino: sviluppo di un applicazione web-database

Corso Drupal «Project management»

Esercitazione n 4. Obiettivi

Vendite e Acquisti On Line Manuale Utente

Le novità del software di configurazione ETS4 e gli esempi applicativi

Le transazioni. Dott. Doria Mauro

Panoramica: che cosa è necessario

Sistema Informativo Gestione Fidelizzazione Clienti MANUALE D USO

Guida alla registrazione on-line di un DataLogger

GSC 100% Software per la gestione dei corsi di formazione Descrizione prodotto

CONFIGURAZIONE E GESTIONE DEI DATABASE (rev. 1.1)

developed by Emanuele De Carlo

Manuale Knowledge Base

Mac Application Manager 1.3 (SOLO PER TIGER)

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

PRINCIPALI AGGIORNAMENTI DELLA NUOVA VERSIONE DI WEBDIOCESI. 1 Nuovo menù di gestione

Manuale Utente Albo Pretorio GA

Settaggio impostazioni tema. Cliccando nuovamente su aspetto e poi su personalizza si avrà modo di configurare la struttura dinamica della template.

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008

Transcript:

Hibernate Configurazione di base Dott. Doria Mauro doriamauro@gmail.com

I file di configurazione Hibernate prevede l uso dei file di configurazione formato XML. I principali file sono: Un file di configurazione unico generale (nome di default: hibernate.cfg.xml) Un file di mapping per ogni classe persistente (nome di default: nomeclasse.hbm.xml) Il file di configurazione generale può anche essere sostituito da un file properties dal nome hibernate.propoeries 2

Configurazione di base Il modo migliore per iniziare a lavorare con Hibernate è ottenere un oggetto SessionFactory a partire da un oggetto Configuration. L istruzione tipica è la seguente: SessionFactory sessionfactory = new Configuration().configure().buildSessionFactory(); Quanto il costruttore della classe Configuration è invocato, Hibernate cercherà un file hibernate.properties nella radice del classpath (fuori da tutti i package) e caricherà tutti le proprietà hibernate.* dichiarate all interno del file 3 Quando viene invocato il metodo configure(), Hibernate cercherà il file hibernate.cfg.xml nella radice del classpath.

Configurazione di base 4 Nel caso si vogliano collocare il file di configurazione in un altra posizione e/o assegnarli un altro nome, è possibile scrivere: SessionFactory sessionfactory = new Configuration().configure("/persistence/auction.cfg.xml").buildSessionFactory(); Infine, è possibile inserire i dati di configurazione in maniera programmatica come nel seguente esempio: SessionFactory sessionfactory = new Configuration().configure("/persistence/auction.cfg.xml").setProperty(Environment.DEFAULT_SCHEMA, "CAVEATEMPTOR").addResource("auction/CreditCard.hbm.xml").buildSessionFactory(); NOTA : Le priorità sono: properties xml programmatica Le informazioni non si sostituiscono ma si aggiungono Nuova proprietà. Per le proprietà vi sono specifiche costanti

SessionFactory Se l applicazione lavora con più DB, è necessario costruire un oggetto SessionFactory per ogni DB. Una applicazione, solitamente, istanzia un oggetto SessionFactory all inizio dell applicazione. Tutti gli oggetti Session utilizzati durante l applicazione sono costruiti da questa unica istanza SessionFactory. Un oggetto SessionFactory, una volta costruito, è thread-safe e va condiviso con il resto dell applicazione. Come fare? 5 La migliore soluzione è costruire un oggetto SessionFactory statico ed una inizializzazione statica.

HibernateUtil Nel caso si utilizzi il prodotto in un ambiene stand-alone, Hibernate ci suggerisce di costruire una classe di utilità per la gestione della SessionFactory. Tale classe prende il nome di HibernateUtil. La classe gestisce, di base, la creazione di oggetti SessionFactory e, in una versione estesa, di oggetti Session legandoli al ThreadLocal E possibile reperire il codice sorgente della classe HibernateUtil direttamente dal sito di Hibernate o su internet (nelle diverse varianti) in quanto è un pattern molto noto nell ambiente. 6

7 La classe HibernateUtil: package persistence; import org.hibernate.*; import org.hibernate.cfg.*; public class HibernateUtil { private static SessionFactory sessionfactory; static { try { sessionfactory=new Configuration() }.configure().buildsessionfactory(); } catch (Throwable ex) { throw new ExceptionInInitializerError(ex); } } public static SessionFactory getsessionfactory() { return sessionfactory; } public static void shutdown() { getsessionfactory().close(); }

Il file xml di configurazione 8 Il file di configurazione generale si presenta in questa forma: <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <! Configura connessione e dialetto --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/helloworld</property> <property name="hibernate.connection.username >root</property> <property name="hibernate.dialect">org.hibernate.dialect.mysql5dialect</property> <! Stampa SQL sulla console--> <property name="show_sql">true</property> <property name="format_sql">true</property> <property name="use_sql_comments">true</property> <!-- Lista dei file xml di mapping--> <mapping resource="hello/message.hbm.xml"/> </session-factory> </hibernate-configuration>

Il file xml di configurazione Base della configurazione sono le informazioni relative al DB: <! Configura connessione e dialetto --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/helloworld</property> <property name="hibernate.connection.username >root</property> <property name="hibernate.connection.password >root</property> <property name="hibernate.dialect">org.hibernate.dialect.mysql5dialect</property> Configurazione del data source dialetto NOTA: il prefisso hibernate nei nomi delle proprietà si può omettere 9 NOTA: Punto fondamentale della configurazione è la scelta del dialetto. Il dialetto è la variante di SQL specifica per un certo DBMS. Hibernate utilizzerà il dialetto per comporre istruzioni SQL specifiche per un certo DBMS e ne ottimizza l uso. La maggior parte dei dialetti è disponibile direttamente nelle librerie di Hibernate.

Il file xml di configurazione Punto fondamentale del file di configurazione è l indicazione dei file di mappings. Attraverso queste indicazioni, Hibernate sarà in grado di mappare correttamente le classi persistenti dell applicazione con il database. 10. <!-- Lista dei file xml di mapping--> <mapping resource="hello/message.hbm.xml"/>.

Il file xml di configurazione Interessante opzione è la richiesta di visualizzazione delle istruzioni SQL che Hibernate creerà durante il suo utilizzo.... <property name="show_sql">${displaysql}</property> <property name="format_sql">true</property> <property name="use_sql_comments">true</property>... In particolare otterremo a video le istruzioni(parametro show_sql) ben formattate (parametro format_sql) e commentate (parametro use_sql_coments). 11 NOTA: Nel precedente esempio si fa utilizzo di una configurazione dinamica. Il parametro verrà passato in fase di start dell applicazione (lanciando java -displaysql=true).

Connection pool Per applicazioni non banali è utile utilizzare un pool di connessioni. Lo scopo di una connection pool sono: Minimizzare l apertura e la chiusura di nuove connessioni. Il pool mantiene e gestisce le connessioni minimizzando i costi queste due operazioni. Alcuni DBMS possono fare operazioni molto complesse in queste fasi. Minimizzare le connessioni sospese, Il pool ottimizza l uso delle connessioni sospese. 12 Gestire le istruzioni preparate (prepared statement) mantenendole in cache oltre le singole richieste: la costruzione delle istruzioni preparate è costosa per i driver.

Connection pool senza Hibernate Utilizzo di un pool di connessioni diretto con JDBC (in un ambiente JSE) 13 L applicazione può utilizzare un algoritmo di pooling di terze parti come il software opn source C3P0 Il codice dell applicazione chiede un oggetto connection al pool, lo utilizza per lanciare operazioni SQL con JDBC e poi lo rilascia.

Connection pool con Hibernate Utilizzo di un pool di connessioni con Hibernate (in un ambiente JSE) 14 In questo caso, Hibernate fa da client verso il pool di connessioni. L applicazioni utilizza oggetti Session e Query per compiere operazioni di persistenza e oggetti Transaction per gestire le transazioni. NOTA: la connection pool C3P0 sono integrati nel framework. E necessario aggiungere la libreria c3p0.jar nel progetto.

Configurare la pool connection E possibile configurare il pool di connessioni nel file di configurazione : <!-- Usa il connection pool provider C3P0 --> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.timeout">300</property> <property name="hibernate.c3p0.max_statements">50</property> <property name="hibernate.c3p0.idle_test_period">3000</property> oppure nel file properties: hibernate.c3p0.min_size = 5 hibernate.c3p0.max_size = 20 hibernate.c3p0.timeout = 300 hibernate.c3p0.max_statements = 50 hibernate.c3p0.idle_test_period = 3000 15 NOTA: la soluzione standard senza C3P0 è: <property name="connection.pool_size">1</property>

Configurare la pool connection Significato delle proprietà: <!-- Usa il connection pool provider C3P0 --> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.timeout">300</property> <property name="hibernate.c3p0.max_statements">50</property> <property name="hibernate.c3p0.idle_test_period">3000</property> 16 min_size: il minimo numero di connessioni che il pool c3p0 mantiene pronte nel pool max_size (obbligatoria): numero di connessioni massimo nel pool timeout: tempo massimo (in secondi) di inattività di un oggetto. Scaduto il tempo l oggetto viene distrutto. max_statements: numero massimo di istruzioni preparate mantenute in cache Idle_test_period: tempo (in secondi) oltre il quale l oggetto viene validato

Per saperne di più Per sapere di più sulla soluzione c3p0 è possibile consultare la documentazione: http://www.mchange.com/projects/c3p0/index.html 17

Logging Abbiamo già visto come sia possibile ottenere a video le istruzione SQL che Hibernate crea a fronte delle operazioni di persistenza. Questa è una interessante opzione in quanto ci si può rendere conto di quali istruzioni SQL vengono eseguite ma anche quando. Hibernate, allo scopo di ottimizzazione, esegue in maniera asincrona le istruzioni SQL, in una quantità ed ordine diverso da quello che ci si possa aspettare in virtù delle sue caratteristiche avanzate. 18 Per un logging approfondito potrebbe non essere sufficiente mostrare semplicemente le istruzioni SQL.

Logging Hibernate fa uso di log4j per il logging. E necessario quindi avere la libreria commons-loggings.jar nel progetto. E possibile inoltre configurare il logging con log4j creando il file di properties log4j.properties. Di seguito un esempio: 19 # Direct log messages to stdout log4j.appender.stdout=org.apache.log4j.consoleappender log4j.appender.stdout.target=system.out log4j.appender.stdout.layout=org.apache.log4j.patternlayout log4j.appender.stdout.layout.conversionpattern=%d{absolute} %5p %c{1}:%l - %m%n # Root logger option log4j.rootlogger=info, stdout # Hibernate logging options (INFO only shows startup messages) log4j.logger.org.hibernate=info # Log JDBC bind parameter runtime arguments log4j.logger.org.hibernate.type=info

Statistiche E possibile abilitare e visualizzare le statistiche in maniera programmatica agendo sulla SessionFactory. Di seguito un esempio: Statistics stats = sessionfactory.getstatistics(); stats.setstatisticsenabled(true); //esempio di metodi per le statistiche stats.getsessionopencount(); stats.logsummary(); EntityStatistics itemstats = stats.getentitystatistics("beans.category"); itemstats.getfetchcount(); Interfaccia per le statistiche globali Interfaccia per le statistiche di una singola classe 20 Le altre interfacce utili per le statistiche sono: CollectionStatistics QueryStatistics SecondLevelCacheStatistics NOTA: è possibile abilitare le statistiche anche nel file di configurazione: hibernate.generate_statistics=true

Domande? Logging Statistiche properties xml 21 SessionFactory Hello world Connection Pool C3P0 dialetto