tutorial 0) Far girare un DBMS. 1) Aggiungere nelle

Transcript

tutorial 0) Far girare un DBMS. 1) Aggiungere nelle
tutorial
0) Far girare un DBMS.
1) Aggiungere nelle dipendenze di un nuovo progetto Maven:
* hibernate-core
* mysql-connector-java
2) In src/main/resources metto hibernate.cfg.xml. Essenziale perchè
altrimenti non funziona un cazzo.
(vedi allegato)
3) Creare una classe HibernateUtils (vedi slide 35). Ha come scopo
rendere accessibile sotto forma singleton la SessionFactory,
oggetto thread safe che rappresenta le connessioni alla base dati.
Da SessionFactory si può creare la sessione. L'unico metodo che
ci serve è getSessionFactory()
4) Siccome siamo nel contesto di un'applicazione Servlet e vogliamo
che tutti si servano facilmente di Hibernate creiamo un filtro.
HibernateSessionFilter (1:14:00, lezione 14).
Il filtro ha una variabile privata di tipo SessionFactory che si
va a procurare nel metodo init().
Il metodo destroy serve a rilasciare le risorse nel DB quando
viene fatto l'undeployment.
Quando arriva una richiesta e quindi parte il doFilter():
- procurati la sessione corrente, inaccessibile ad altri thread
- successivamente si costruisce una transazione nel contesto
della sezione
- si passa l'elaborazione a filtri e servlet a cui è destinata
questa cosa
- quando tutti hanno finito si fa il commit
- se c'è qualche problema si può fare il rollback di transazione
oppure un'altra cosa. In ogni caso si rilancia.
- alla fine di tutto si chiude
Si noti che il filtro è da registrare in web.xml e l'URL pattern
è /* perchè si applica su chiunque faccia richiesta
5) Scrivo l'applicazione Web (1:20:00, lezione 14)
1agina p
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
Informazioni legate al DB
<!-- Database connection settings -->
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="connection.url">jdbc:hsqldb:hsql://localhost</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
Nelle applicazioni reali non si usa questo
<!-- JDBC connection pool (use the built-in) -->
connection pool perchè è "scarso": possiamo
<property name="connection.pool_size">1</property> usare il DataSource. Per iniziare comunque
va bene.
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.HSQLDialect</property> Dialetto Hibernate
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
Informazioni generali per
configurare l'ambiente di
esecuzione: buono avere
una session per thread per
gestire la cosa da filtri.
<!-- Disable the second-level cache -->
<property
name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
In questo modo sulla console di Tomcat vedo le singo<!-- Echo all executed SQL to stdout -->
le operazioni eseguite, e così capisco che cosa sta
succedendo in background. Volendo posso dirgli anche
<property name="show_sql">true</property>
di formattare l'otuput (format_sql)
<!-- Drop and re-create the database schema on startup -->
Come si comporta Hibernate
<property name="hbm2ddl.auto">update</property>
se c'è un mismatch tra DB
<mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/>
e insieme di oggetti? *
</session-factory>
</hibernate-configuration>
* In produzione si tiene validate. I valori possibili sono:
- create: tutte le volte che viene lanciato cancella lo schema per intero e crea tante tabelle quante sono le entità annotate
- update: confronta la base dati con gli oggetti e se ci sono le differenze modifica la base dati. Pericoloso, quindi evitiamo.
Il mapping è molto più comodo da fare qui insieme alle annotazioni e non sull'hbm.xml.
Page 1