Studio e Sperimentazione di Framework Java per la Persistenza

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Studio e Sperimentazione di Framework Java per la Persistenza"

Transcript

1 Facoltà di Ingegneria dell'informazione, informatica e statistica Ingegneria informatica Tesi di Laurea Studio e Sperimentazione di Framework Java per la Persistenza Relatore : Prof. Massimo Mecella Laureando : Giulio Gullà matricola : Anno Accademico :

2 2

3 3

4 Sommario 1. INTRODUZIONE Hibernate 8 Hibernate Tools Java Persistence API SVILUPPARE CON HIBERNATE E JPA Generale Scenari di sviluppo Top Down Bottom up Middle out Meet in the middle Classi di dominio File di configurazione Mapping Mapping di proprietà identificatore Mapping di proprietà con molteplicità massima Tipi Hibernate Mapping di proprietà con molteplicità massima maggiore di Mapping di proprietà istanze di una classe che realizza un tipo UML Mapping di associazioni Mapping di ereditarietà Interfacce di Hibernate SessionFactory (org.hibernate.sessionfactory) Session (org.hibernate.session) Transaction (org.hibernate.transaction) Query (org.hibernate.query) Java Persistence API EntityManagerFactory (javax.persistence.entitymanagerfactory) EntityManager (javax.persistence.entitymanager) EntityTransaction (javax.persistence.entitytransaction). 91 4

5 2.7.4 Query (javax.persistence.query) Hibernate Query Language e Java Persistence Query Language Creazione di un oggetto query Binding dei parametri Gestione dei risultati Operazioni di aggiornamento ed eliminazione Query Generazione dello schema della base di dati Creazione e funzionamento di un progetto APPLICAZIONE DI ESEMPIO Requisiti Classi di dominio Eccezioni Persistenza Attività AttivitàComplesse Attività atomiche Interfaccia grafica Main CONSIDERAZIONI FINALI. 166 Riferimenti bibliografici

6 6

7 1. INTRODUZIONE La gestione della persistenza è un argomento delicato nella progettazione di applicazioni software. Lo sviluppo di applicazioni Object-Oriented che utilizzano un DBMS relazionale per immagazinare i dati in memoria secondaria è uno scenario molto comune. Ciò che rende complessa la costruzione dello strato di persistenza è il problema dell object/relational impedence mismatch, la discrepanza tra il paradigma Object-Oriented e il paradigma relazionale. Questo problema è causato dal fatto che il paradigma Object- Oriented è basato su principi di ingegneria del software mentre il paradigma relazionale è basato su principi matematici. La progettazione e la realizzazione delle classi di dominio e della base di dati mostrano questa differenza: le classi di dominio vengono progettate con UML, un linguaggio di modellazione Object- Oriented, mentre per la progettazione della base di dati viene inizialmente utilizzato il modello Entità- Relazione per creare uno schema concettuale che successivamente viene indebolito per permettere la traduzione dello schema nel modello relazionale della base di dati. Il problema dell impedence mismatch deve essere analizzato e risolto nel modo opportuno in fase di progettazione. Un altro aspetto molto importante nella gestione della persistenza è l interazione tra lo strato di logica applicativa e lo strato di persistenza. In applicazioni Java la comunicazione con la base di dati avviene utilizzando API specifiche come ODB (Open Database Connectivity) o JDBC (Java Database Connectivity). Una delle strategie più valide e utilizzate è l uso del pattern Data Access Object (DAO) per la creazione di oggetti che costituiscono uno strato di comunicazione con la base di dati. La realizzazione dei DAO avviene usando API JDBC per rendere disponibili le operazioni CRUD (Create Read Update Delete) allo strato di logica applicativa. I DAO incapsulano l accesso alla base di dati e permettono di gestire la maggior parte degli scenari ma la loro realizzazione necessita di una conoscenza dettagliata della base di dati. Questo lavoro ha lo scopo di presentare una strategia alternativa per la gestione della persistenza in applicazioni Java: l Object-Relational Mapping (ORM). Questa tecnica consiste nel mappare le classi di dominio dell applicazione su una base di dati relazionale. Il mapping avviene utilizzando appositi framework di persistenza che, dopo una fase iniziale di configurazione, permettono di generare una base di dati relazionale partendo dalle classi di dominio dell applicazione e di gestirne l accesso. In particolare vengono analizzati due importanti framework java per la persistenza: Hibernate e Java Persistence API. La trattazione prosegue con una introduzione ai due framework esaminati e con un lungo capitolo dedicato alle tecniche di sviluppo in applicazioni Hibernate e Java Persistence. Questo capitolo è il cuore dell elaborato, vengono spiegati i principali costrutti utili in differenti scenari. Ogni tecnica illustrata è stata sperimentata e viene accompagnata da un esempio che ne mostra l utilizzo. Nel terzo capitolo viene presentata un applicazione Java Persistence completa e in conclusione ci sono le considerazioni finali. 7

8 1.1 Hibernate Hibernate è un framework open source con servizi Object-Relational Mapping (ORM) in Java. Hibernate ORM (fino alla versione 4.0 conosciuto come Hibernate Core), composto dalle API native di Hibernate e il suo motore, è disponibile alla versione 4.1, utilizzata in questa trattazione. Il software è composto da API Java che permettono di gestire la persistenza con il mapping delle classi sulla base di dati e forniscono interfacce per l accesso ai dati persistenti. Hibernate Tools Hibernate Tools è un insieme di strumenti per Hibernate racchiusi in una suite di plugin Eclipse e dei task Ant per l'integrazione a stadio di compilazione. Le funzioni messe a disposizione sono: Mapping Editor: un editor per i file di mapping XML; Console: permette di configurare le connessioni alla base di dati ed eseguire query interattivamente; Reverse Engineering: la funzione più importante di Hibernate Tools. Consente di generare le classi di dominio dell'applicazione Java dalle tabelle della base di dati; Wizards: procedure fornite per la generazione dei file di configurazione di Hibernate e dei file di configurazione Console; Task Ant: utilizzato per avviare la generazione dello schema della base di dati, la generazione dei file di mapping e la generazione del codice Java durante la compilazione. 1.2 Java Persistence API Le Java Persistence API (JPA) sono un framework Java per la gestione della persistenza. Attualmente le Java Persistence API sono alla versione 2.0 (JSR 317: Java Persistence 2.0). Come Hibernate, le Java Persistence API permettono di effettuare il mapping delle classi di dominio sulle tabelle di una base di dati relazionale e di interagire con esse. Per utilizzare le Java Persistence API è necessaria un implementazione. In questo studio verrà utilizzata l implementazione di Hibernate analizzando le strategie di mapping appartenenti allo standard delle Java Persistence API e tralasciando costrutti specifici del software. L implementazione di Hibernate delle Java Persistence API è composta da: Hibernate Annotations: sistema di metadati per il mapping delle classi di dominio; Hibernate EntityManager: implementazione delle interfacce di programmazione e delle regole riguardanti il ciclo di vita delle entità definito dalle specifiche JPA

9 2. SVILUPPARE CON HIBERNATE E JPA 2.1 Generale Un applicazione sviluppata con Hibernate o con le Java Persistence API è composta da quattro elementi: Classi di dominio Java File di configurazione Metadati per il mapping Base di dati relazionale Questi elementi vengono realizzati secondo diverse modalità in base allo scenario di sviluppo. 2.2 Scenari di sviluppo Vengono ora presentati i possibili scenari di sviluppo con Hibernate e le Java Persistence API. In questo studio verrà analizzato a fondo solo lo scenario top down Top Down Nello sviluppo top down si parte dalle classi di dominio dell'applicazione e si effettua il mapping su tabelle della base di dati relazionale. Lo sviluppo top down è molto comodo in assenza di uno schema della base di dati. Strumenti principali di Hibernate utilizzati: <hbm2ddl> : permette di creare, aggiornare e convalidare lo schema della base di dati utilizzando i file di mapping e configurazione di Hibernate Bottom up Scenario di reverse engineering in cui si ha una base di dati legacy e vengono generate le classi di dominio e i metadati per il mapping. La generazione delle classi con questo sviluppo è rapida ma lo schema con cui sono organizzate le classi di dominio non potrà mai avvicinarsi alla costruzione ideale del diagramma delle classi. Il mapping è condizionato dalle tabelle dello schema e genererà un modello delle classi di dominio degradato. Strumenti principali di Hibernate utilizzati: <hbm2java> : permette la generazione delle classi di dominio Java utilizzando i file di reverse engineering e configurazione di Hibernate. <hbm2hbmxml> : permette la generazione dei file di mapping delle classi di dominio Java utilizzando I file di reverse engineering e configurazione di Hibernate. 9

10 2.2.3 Middle out Scenario che punta ad utilizzare a fondo le funzioni di Hibernate per lo sviluppo di una nuova applicazione Java. Il punto di partenza è la scrittura a mano dei file XML di mapping dai quali verranno create le tabelle per la base di dati utilizzando lo strumento <hbm2ddl> e generate le classi Java con <hbm2java>. Lo scenario di sviluppo middle out non è possibile utilizzando le Java Persistence API. Questo approccio è consigliabile solo a sviluppatori con una profonda conoscenza di Hibernate Meet in the middle Lo scenario più complesso e difficile. Si tratta di combinare le classi di dominio con uno schema di base di dati legacy. Mappare classi di dominio Java arbitrarie su uno schema dato non è possibile, sarà quindi necessario effettuare refactoring delle classi Java, dello schema della base di dati o di entrambi. E uno scenario piuttosto raro. 2.3 Classi di dominio Le classi di dominio Java dovranno essere realizzate secondo l approccio Plain Old Java Object (POJO). Verranno ora elencate le principali caratteristiche della realizzazione delle classi di dominio, in particolare sottolineando le differenze tra la realizzazione ideale e l'approccio POJO. Caratteristiche di una classe POJO: - Costruttore senza argomenti E richiesto da Hibernate e deve essere almeno visibile all interno del package. Solitamente viene lasciato vuoto e vengono definiti ulteriori costruttori per l utilizzo all interno dell applicazione. - Proprietà identificatore La classe deve fornire una proprietà con funzione di identificatore. - Classe non-final Le classi non-final sono da preferire per garantire il funzionamento delle operazioni di lazy loading di Hibernate. - Metodi get e set per le proprietà degli oggetti della classe E importante che siano definiti per tutte le proprietà della classe. I nomi dei metodi devo essere necessariamente nella forma get (o set) seguito dal nome della proprietà con la prima lettera maiuscola (es. getproprietà() e setproprietà()). Note: 1 - Il metodo set di proprietà immutabili come quella che ha ruolo di identificatore dell oggetto può essere definito privato; 10

11 2 - Proprietà persistenti che sono collezioni avranno il metodo set privato e il metodo get che non restituisce un clone della collezione ma la collezione stessa. - Metodi di business - Metodi speciali I metodi speciali tostring(), equals(), hashcode() e clone() devono essere ridefiniti in alcune circostanze: 1 è necessario ridefinire equals() e hashcode() se si vogliono inserire istanze di una classe persistente in un set; 2 è necessario ridefinire tostring(), equals() e hashcode() se la classe realizza un nuovo tipo di valore; 3 - è necessario ridefinire clone() se nella classe sono definiti metodi che effettuano side-effect. Associazioni: Per la realizzazione di associazioni secondo l'approccio POJO non vengono utilizzate classi TipoLink. Associazioni a responsabilità singola senza attributi - molteplicità 0..1 (o 1..1): la classe con responsabilità sull'associazione ha una proprietà riferimento ad un'istanza della classe persistente a cui è associata; - molteplicità 0..* (o 1..*): la classe con responsabilità sull'associazione ha una proprietà insieme di riferimenti ad istanze delle classi persistenti a cui è associata; Associazioni a responsabilità doppia senza attributi Come per la realizzazione ideale del diagramma delle classi, viene utilizzata una classe manger che gestisce le modifiche dell'associazione. La classe manager dovrà però gestire direttamente riferimenti a istanze delle classi conivolte e non istanze di classi TipoLink. Nota: la classe manager non deve essere resa persistente. Associazioni con attributi Hibernate e JPA non forniscono costrutti specifici per il mapping di associazioni con attributi. In caso di associzioni con molteplicità massima pari a 1, è possibile utilizzare un approccio naif, trasformando gli attributi dell'associazione in nuove proprietà della classe che ha responsabilità sull associazione. Se l'associazione con attributi ha molteplicità massima superiore a 1, si può considerare di effettuare refactoring aggiungendo una nuova classe di dominio per rappresentare l associazione. Una possibile strategia è spiegata nell apposito paragrafo. 11

12 Esempio : Classe POJO File Utente.java package domain; import java.util.*; public class Utente { private String username; private String password; private Set<String> numtelefono; private Indirizzo indirizzo; private Set<Acquisto> acquisti; protected Utente() { public Utente(String username, String password) { this.username = username; this.password = password; numtelefono = new HashSet<String>(); effettua = new HashSet<Acquisto>(); public String getusername() { return this.username; private void setusername(string username) { this.username = username; public String getpassword() { return this.password; public void setpassword(string password) { this.password = password; 12

13 public Set<String> getnumtelefono() { return (Set<String>) this.numtelefono; private void setnumtelefono(set<string> numtelefono) { this.numtelefono = numtelefono; public Indirizzo getindirizzo() { return this.indirizzo; public void setindirizzo(indirizzo indirizzo) { this.indirizzo = indirizzo; public Set<Acquisto> getacquisti() { return (Set<Acquisto>) this.acquisti; private void setacquisti(set<acquisto> acquisti) { this.acquisti = acquisti; public double calcolacostospedizione(indirizzo posizione) { 2.4 File di configurazione I file di configurazione contengono informazioni riguardo le impostazioni di connessione al DBMS e la posizione dei file di mapping che verranno utilizzati per l applicazione. Hibernate Il file di configurazione principale di Hibernate è hibernate.cfg.xml. Questo file deve essere salvato nella radice del classpath dell applicazione. Esempio : File di configurazione di Hibernate File hibernate.cfg.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" " <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class"> org.postgresql.driver 13

14 </property> <property name="connection.url"> jdbc:postgresql://localhost:5432/test </property> <property name="connection.username">postgres</property> <property name="connection.password">password</property> <!-- Use the C3P0 connection pool provider --> <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> <!-- SQL dialect --> <property name="dialect"> org.hibernate.dialect.postgresqldialect </property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- Mapping files --> <mapping resource="domain/utente.hbm.xml"/> <mapping resource="domain/acquisto.hbm.xml"/> </session-factory> </hibernate-configuration> L'elemento principale è <hibernate-configuration> che contiene al suo interno l'elemento <session-factory> che definisce tutte le impostazioni per la connessione ad una base di dati. Descrizione delle proprietà hibernate.connection: hibernate.connection.driver_class hibernate.connection.url hibernate.connection.username hibernate.connection.password Nome del driver JDBC specifico per il DBMS utilizzato. Indirizzo JDBC della base di dati per la connessione. Nome utente per la connessione al DBMS. Password per la connessione al DBMS. Seguono proprietà per la gestione di un pool di connessioni JDBC. Nell'esempio viene utilizzato un software di terze parti, c3p0, per avere migliori performance e stabilità. In alternativa può essere utilizzato il gestore interno ad Hibernate che utilizza un algoritmo piuttosto semplice. Per fare ciò si utilizzerà la proprietà hibernate.connection.pool_size specificando il numero massimo di connessioni come valore. 14

15 Descrizione delle proprietà hibernate.c3p0: hibernate.c3p0.min_size hibernate.c3p0.max_size hibernate.c3p0.timeout hibernate.c3p0.max_statements hibernate.c3p0.idle_test_period Numero minimo di connessioni JDBC che c3p0 mantiene pronte. Numero massimo di connessioni JDBC nel pool. Se le connessioni vengono esaurite viene lanciata un'eccezione a runtime. Periodo di timeout dopo il quale una connessione inattiva viene rimossa dal pool. Numero massimo di prepared statement in cache. Il caching è molto importante per migliorare le performance di Hibernate. Periodo di tempo in secondi prima che una connessione venga automaticamente convalidata. La proprietà dialect specifica la variante di SQL utilizzata dal DBMS. Gli elementi <mapping> specificano i file di mapping che Hibernate dovrà utilizzare. Java Persistence API Il file di configurazione di JPA è chiamato persistence.xml e contiene le stesse informazioni contenute in hibernate.cfg.xml con alcune differenze. persistence.xml deve essere salvato in una directory nominata META-INF posizionata nel classpath dell applicazione. Esempio : File di configurazione di JPA File persistence.xml <?xml version="1.0" encoding="utf-8"?> <persistence xmlns=" xmlns:xsi=" xsi:schemalocation=" version="2.0"> <persistence-unit name="testpu"> <provider>org.hibernate.ejb.hibernatepersistence</provider> <!-- Not needed, Hibernate supports auto-detection in JSE <class>domain.utente</class> <class>domain.acquisto</class> --> <properties> <property name="hibernate.archive.autodetection" 15

16 value="class, hbm"/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.format_sql" value="true"/> <property name="hibernate.connection.driver_class" value="org.postgresql.driver"/> <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/test"/> <property name="hibernate.connection.username" value="postgres"/> <property name="hibernate.connection.password" value="password"/> <property name="hibernate.c3p0.min_size" value="5"/> <property name="hibernate.c3p0.max_size" value="20"/> <property name="hibernate.c3p0.timeout" value="300"/> <property name="hibernate.c3p0.max_statements" value="50"/> <property name="hibernate.c3p0.idle_test_period" value="3000"/> <property name="hibernate.dialect" value="org.hibernate.dialect.postgresqldialect"/> <property name="hibernate.hbm2ddl.auto" value="create"/> </properties> </persistence-unit> </persistence> L elemento principale è <persistence> che contiene la definizione della grammatica, al cui interno ci possono essere uno o più elementi <persistence-unit> che contengono le informazioni per la connessione al DBMS. Ogni elemento <persistence-unit> ha un nome, definito dall attributo name, che verrà utilizzato per la creazione di EntityManager per l accesso alla base di dati. Il primo elemento all interno di <persistence-unit> è <provider> con il quale viene specificata l implementazione di JPA utilizzata all interno dell applicazione, in questo caso l implementazione di Hibernate. La specifica delle classi Java contenenti le annotazioni per il mapping può avvenire utilizzando elementi <class> oppure con la proprietà di Hibernate hibernate.archive.autodetection che permette di determinare quali file verranno rilevati automaticamente da Hibernate per il mapping. Nell esempio il valore dell elemento hibernate.archive.autodetection è class,hbm, il valore di default, che permette il rilevamento automatico di classi Java con annotazioni e file di mapping di Hibernate. A seguire ci sono tutte le proprietà che specificano le impostazioni per la connessione JDBC alla base di dati, analoghe a quelle contenute nel file di configurazione di Hibernate. 16

17 2.5 Mapping Il mapping delle classi Java di dominio in tabelle di una base di dati relazionale in Hibernate e JPA viene effettuato utilizzando metadati differenti: Hibernate utilizza file di mapping XML mentre JPA utilizza annotazioni inserite all interno del codice delle classi stesse. Entrambi i metodi specificano esattamente come una classe deve essere resa persistente. Hibernate Il file di mapping Hibernate di una classe Classe.java è chiamato Classe.hbm.xml. E' composto da un elemento principale di nome <hibernate-mapping> che contiene al suo interno un elemento <class> con tutte le informazioni per il mapping della classe java. Esempio: File di mapping per la classe Utente.java File Utente.hbm.xml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" " <hibernate-mapping> <class name="domain.utente" table="utente"> <id name="username" column="username" type="string"/> <property name="password" column="password" type="string" not-null="true"/> <set name="effettua"> <key column="username" /> <one-to-many class="domain.acquisto"/> </set> </class> </hibernate-mapping> Descrizione di alcuni attributi dell'elemento <class> : name="classname" table="tablename" schema="schemaname" Il nome completo della classe persistente. Il nome della tabella in cui verrà mappata la classe. Di default è il nome della classe. Il nome dello schema della base di dati. 17

18 Java Persistence API In JPA i metadati utilizzati per il mapping sono annotazioni indivisibili dal codice Java delle classi di dominio. Esempio: Annotazioni per il mapping della classe Utente.java File Utente.java package domain; import javax.persistence.*; = "utente") public class Utente { private String username; private String password; private Set<Acquisto> effettua; protected Utente() { effettua = new HashSet<Acquisto>(); public Utente(String username, String password) { this.username = username; this.password = password; effettua = new public String getusername() { return this.username; private void setusername(string username) { this.username = = "password", nullable = false) public String getpassword() { return this.password; public void setpassword(string password) { this.password = = = "username", nullable = false) public Set<Acquisto> geteffettua() { return this.effettua; private void seteffettua(set<acquisto> effettua) { this.effettua = effettua; 18

19 public void inserisciacquisto(acquisto acquisto) throws EccezionePrecondizioni { if(acquisto == null) throw new EccezionePrecondizioni("L'oggetto deve essere inizializzato"); else effettua.add(acquisto); public void rimuoviacquisto(acquisto acquisto) throws EccezionePrecondizioni { if(acquisto == null) throw new EccezionePrecondizioni("L'oggetto deve essere inizializzato"); else effettua.remove(acquisto); Per utilizzare le annotazioni in una classe Java è necessario importare il contenuto del package javax.persistence contenente tutte le classi e interfacce necessarie. La prima annotazione in corrispondenza della dichiarazione di classe che la definisce come entità, un oggetto Java che verrà reso persistente. A seguire può essere utilizzata l che permette di definire il nome della tabella in cui verrà mappata la classe e altre informazioni opzionali come lo schema, il catalogo o anche vincoli di chiave. L è opzionale, il valore di default della proprietà name è il nome della classe Java. Le successive annotazioni sono utilizzate per il mapping delle proprietà e delle associazioni. Sviluppando con JPA è importante impostare l accesso ad un entità. L accesso può essere effettuato secondo due modalità: - field-based : il provider accede allo stato dell entità direttamente dalle variabili d istanza. Per effettuare questo tipo di accesso è necessario inserire le annotazioni prima dei campi delle proprietà a cui si riferiscono; - property-based : il provider utilizza i metodi get e set per accedere alle proprietà persistenti dell entità. Per effettuare l accesso property-based è necessario inserire le annotazioni prima dei metodi get delle proprietà. La tipologia di accesso per una entità viene decisa in base all impostazione di accesso della proprietà identificatore. Nota: Anche sviluppando con Hibernate è possibile impostare la tipologia di accesso alle proprietà di un entità. Il comportamento di default di Hibernate è l accesso property-based, però questa impostazione può essere cambiata con l utilizzo dell attributo access nei file di mapping. 19

20 2.5.1 Mapping di proprietà identificatore Le classi mappate devono dichiarare la colonna che è chiave primaria della tabella. Esempio: proprietà identificatore File Acquisto.java package domain; public class Acquisto { private long id; public long getid() { return this.id; private void setid(long id) { this.id = id; Hibernate Viene utilizzato l'elemento <id>. Descrizione di alcuni attributi dell'elemento <id> : name="propertyname" type="typename" column="column_name" Il nome della proprietà identificatore. Nome che indica il tipo Hibernate. Il nome della colonna che è chiave primaria. Di default è il nome della proprietà. L'elemento <id> può avere l'elemento figlio <generator> con cui viene nominata una classe usata per generare identificatori unici per le istanze della classe persistente. Se la classe generator richiede parametri, questi verranno passati con elementi <param> figli di <generator>. Le classi generator implementano l'interfaccia org.hibernate.id.identifiergenerator. E' possibile fornire una propria implementazione dell'interfaccia o utilizzare le classi built-in. 20

21 Alcune delle classi generator: increment : genera identificatori di tipo long, short o int che sono unici solo quando nessun altro processo sta inserendo dati nella stessa tabella. Non usare in cluster. identity : supporta colonne identity in DB2, MySQL, MS SQL Server, Sybase e HypersonicSQL. L'identificatore ritornato è di tipo long, short o int. sequence : usa sequence in DB2, PostgreSQL, Oracle, SAP DB, McKoi o generator in Interbase. L'identificatore ritornato è di tipo long, short o int. assigned : lascia che l'applicazione assegni un identificatore all'oggetto prima che il metodo save() venga chiamato. E' la strategia di default se l'elemento <generator> non viene specificato. native : utilizza identity, sequence o hilo a seconda del DBMS utilizzato. Esempio : utilizzo dell'elemento <id> con <generator> File Acquisto.hbm.xml <hibernate-mapping> <class name="domain.acquisto" table="acquisto"> <id name="id" column="id_acquisto"> <generator class="native"/> </id> </class> </hibernate-mapping> Java Persistence API In JPA viene utilizzata l in corrispondenza della proprietà identificatore. Per sfruttare una classe di identificatori unici si usa l per la quale si può impostare la proprietà strategy per scegliere una classe identificatore specifica, altrimenti assumerà il valore di default AUTO, analogo alla classe native di Hibernate. Le strategie di generazione più comuni sono IDENTITY e SEQUENCE, anch esse analoghe ai corrispettivi Hibernate. Esempio : utilizzo File Acquisto.java package domain; = "acquisto") public class Acquisto { 21

22 private = GenerationType.SEQUENCE) public long getid() { return this.id; Identificatore composto Gli identificatori composti sono utilizzati per mappare identificatori formati da più di una proprietà. In questo caso l identificatore dell entità è una classe apposita, le cui proprietà diventeranno colonne della tabella che identificano. E importante che la classe che rappresenta l identificatore implementi java.io.serializable e ridefinisca i metodi equals() e hashcode(). Esempio: identificatore composto File Utente.java package domain; public class Utente { private IdUtente id; protected Utente() { public IdUtente getid() { return this.id; private void setid(idutente id) { this.id = id; File IdUtente.java package domain; public class IdUtente implements java.io.serializable { 22

23 private String username; private String password; protected IdUtente() { public IdUtente(String username, String password) { this.username = username; this.password = password; public boolean equals(object o) { if (o!= null && getclass().equals(this.getclass())) { IdUtente id = (IdUtente) o; return id.username == username && id.password == password; else { return false; public int hashcode() { return username.hashcode() + password.hashcode(); Hibernate Viene utilizzato l elemento <composite-id> specificando l attributo name per indicare la proprietà identificatore e l attributo class per indicare la classe che rapprensenta l identificatore. L elemento <composite-id> ha come figli un numero di elementi <property-key> pari al numero delle proprietà della classe identificatore. <composite-id name="propertyname" class="classname"> <key-property name="property1"/> <key-property name="propertyn"/> </composite-id> Esempio: mapping identificatore composto File Utente.hbm.xml <hibernate-mapping> <class name="domain.utente" table="utente"> <composite-id name="id" class="domain.idutente"> <key-property name="username" access="field"/> <key-property name="password" access="field"/> </composite-id> </class> </hibernate-mapping> 23

24 SQL output CREATE TABLE utente ( username character varying(255) NOT NULL, password character varying(255) NOT NULL, CONSTRAINT utente_pkey PRIMARY KEY (username, password ) ) Java Persistence API Il mapping di un identificatore composto con JPA viene effettuato in modo molto simile alle classi component. La classe che rappresente l identificatore viene annotata mentre per la proprietà id della classe entità viene utilizzata l Esempio: mapping identificatore composto File Utente.java package domain; = "utente") public class Utente private IdUtente id; protected Utente() { public IdUtente getid() { return this.id; private void setid(idutente id) { this.id = id; File IdUtente.java package domain; import javax.persistence.*; 24

25 @Embeddable public class IdUtente implements java.io.serializable { private String username; private String password; protected IdUtente() { Mapping di proprietà con molteplicità massima 1 Le proprietà delle classi persistenti vengono mappate su colonne della tabella corrispondente. Esempio: proprietà di una classe Java File Utente.java package domain; public class Utente { private String username; private String password; public String getpassword() { return this.password; public void setpassword(string password) { this.password = password; Hibernate Hibernate utilizza l elemento <property> per mappare le proprietà della classe persistente. Descrizione di alcuni attributi dell'elemento <property> : name="propertyname" type="typename" column="column_name" unique="true false" Il nome della proprietà che deve avere la prima lettera minuscola. Nome che indica il tipo Hibernate. Il nome della colonna su cui verrà mappata la proprietà. Attiva la generazione di un vincolo unique per la colonna. 25

26 not-null="true false" Attiva la generazione di un vincolo not null per la colonna. Esempio: mapping di proprietà File Utente.hbm.xml <hibernate-mapping> <class name="domain.utente" table="utente"> <property name="password" column="password" type="string" not-null="true"/> </class> </hibernate-mapping> Java Persistence API JPA considera tutte le proprietà non statiche e non transitorie come proprietà persistenti a meno che non vengano annotate Non inserire annotazioni in corrispondenza di una proprietà equivale ad avere l che definisce una proprietà persistente. Per proprietà di tipo data o tempo viene utilizzata l con cui viene specificata la precisione del dato tra DATE, TIME e TIMESTAMP (data attuale, solo ora, o entrambi). Un altra annotazione importante che permette di definire la colonna della tabella in cui verrà mappata la proprietà. Il tipo di dato della colonna in cui verrà mappata la proprietà verrà definito in automatico a partire dal tipo Java. Esempio: mapping di proprietà File Utente.java package domain; = "acquisto") public class Acquisto { private long id; private Date data; private = = "id_acquisto") public long getid() { return 26

27 public Date getdata() { return this.data; public String getinfo() { return this.info; Tipi Hibernate I tipi Hibernate sono utilizzati per il mapping del sistema di tipi Java e dei tipi definiti dagli sviluppatori nel sistema di tipi SQL della base di dati. I tipi Hibernate da utilizzare possono essere definiti con l'attributo type degli elementi XML <id>, <property>, <component>, altrimenti Hibernate utilizza impostazioni di default. E' possibile utilizzare tipi Hibernate built-in oppure si possono definire strategie di conversione personalizzate. Tipi Hibernate di base: Tipo Hibernate Tipo Java Tipo ANSI SQL integer int or java.lang.integer INTEGER long long or java.lang.long BIGINT short short or java.lang.short SMALLINT float float or java.lang.float FLOAT double double or java.lang.double DOUBLE character java.lang.string CHAR(1) byte byte or java.lang.byte TINYINT boolean boolean or java.lang.boolean BIT string java.lang.string VARCHAR big_decimal java.math.bigdecimal NUMERIC big_integer java.math.biginteger NUMERIC 27

28 Tipi Hibernate per date e tempo: Tipo Hibernate Tipo Java Tipo ANSI SQL date time timestamp java.util.date o java.sql.date java.util.date o java.sql.time java.util.date o java.sql.timestamp DATE TIME TIMESTAMP calendar java.util.calendar TIMESTAMP calendar_date java.util.calendar DATE Per convertire un tipo Java in un tipo della base di dati differente, è necessario costruire un tipo Hibernate personalizzato. Hibernate mette a disposizione alcune interfacce per lo scopo. Tra queste, org.hibernate.usertype è l'interfaccia di base, ma possono anche essere utilizzate CompositeUserType, EnhancedUserType, UserCollectionType e UserVersionType per avere supporto a situazioni specifiche. Per definire un nuovo tipo sarà quindi sufficiente costruire una nuova classe Java che implementi una delle interfacce specificando all'interno dei vari metodi come la conversione dovrà avvenire e passarla come valore all'attributo type dell'elemento XML per la proprietà Mapping di proprietà con molteplicità massima maggiore di 1 Le proprietà con molteplicità massima maggiore di 1 sono collezioni omogenee di tipi base che non vengono mappate sulla tabella che rende persistente la classe di cui sono proprietà, ma su un'altra tabella. Esempio : proprietà Set File Utente.java package domain; public class Utente { private String username; private String password; private Set<String> numtelefono; public Set<String> getnumtelefono() { return (Set<String>) this.numtelefono; private void setnumtelefono(set<string> numtelefono) { this.numtelefono = numtelefono; 28

29 Hibernate Nel file di mapping Hibernate della classe verrà inserito un elemento set figlio dell'elemento <class>. <set name="propertyname" table="table_name"> <key column="column_a"/> <element type="typename" column="column_b" not-null="true"/> </set> Gli attributi dell'elemento <set> specificano il nome della proprietà collezione da mappare (name) e il nome della tabella in cui verrà mappata (table). L'elemento <key> permette di specificare la colonna della tabella che rappresenta la collezione (attributo column) per la quale sarà definito un vincolo di foreign key verso la chiave primaria della tabella che rende persistente la classe. Infine l'elemento <element> definisce il tipo di dato per la collezione e il nome della colonna della tabella per il mapping dei valori. L'attributo not-null di <element> viene utilizzato per definire la chiave primaria composta da column_a e column_b. Esempio : mapping di una proprietà Set File Utente.hbm.xml <hibernate-mapping> <class name="domain.utente" table="utente"> <set name="numtelefono" table="num_telefono"> <key column="username"/> <element type="string" column="numero" not-null="true"/> </set> </class> </hibernate-mapping> SQL output CREATE TABLE utente ( username character varying(255) NOT NULL, password character varying(255) NOT NULL, CONSTRAINT utente_pkey PRIMARY KEY (username ) ) CREATE TABLE num_telefono ( username character varying(255) NOT NULL, 29

30 ) numero character varying(255) NOT NULL, CONSTRAINT num_telefono_pkey PRIMARY KEY (username, numero ), CONSTRAINT fk126d878df2625d59 FOREIGN KEY (username) REFERENCES utente (username) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION Per mappare collezioni ordinate si può utilizzare l'elemento <list>, con una struttura molto simile a <set> ma con un elemento figlio <list-index> per la generazione di una colonna per il numero d'ordine. <list name="propertyname" table="table_name"> <key column="column_a"/> <list-index column="position_column"/> <element type="typename" column="column_b"/> </list> Per il mapping di diversi tipi di collezione vengono utilizzati elementi specifici. Interfaccia Java Implementazione Elemento Hibernate java.util.set java.util.hashset set java.util.sortedset java.util.treeset set java.util.list java.util.arraylist list java.util.collection java.util.arraylist bag java.util.map java.util.hashmap map java.util.sortedmap java.util.treemap map Per il mapping di array vengono invece utilizzati gli elementi <primitive-array>, per array di dati primitivi Java, e <array> per array di oggetti. L'utilizzo di array nelle classi di dominio è però sconsigliabile perchè Hibernate non gestisce le proprietà degli array e questo si traduce in un pesante calo delle performance per collezioni persistenti. Java Persistence API Con JPA viene utilizzata l in corrispondenza joincolumns=@joincolumn(name="column_a") 30

31 L definisce la tabella in cui verrà mappata la collezione con nome table_name e la colonna (joincolumn) della tabella che rappresenta la collezione con nome column_a. L che segue, definisce il nome della colonna per il mapping dei valori della collezione. Esempio : mapping JPA di una proprietà Set File Utente.java package domain; = "utente") public class Utente { private String username; private String password; private = "num_telefono", joincolumns = "username") = "numero") public Set<String> getnumtelefono() { return (Set<String>) this.numtelefono; Il mapping di collezioni ordinate con JPA avviene aggiungendo l per definire la colonna per il numero d ordine Mapping di proprietà istanze di una classe che realizza un tipo UML Alcune proprietà di una classe Java possono essere classi che realizzano tipi UML. Queste ultime, non rappresentano entità, cioè non hanno un'identità individuale, ma hanno lo scopo di caratterizzare una classe entità. Una classe che realizza un tipo UML viene mappata sulla tabella della classe entità a cui è collegata ed ogni sua istanza è identificata dalla chiave primaria della classe entità. 31

32 Esempio: proprietà istanza di una classe che realizza un tipo UML File Utente.java package domain; public class Utente { private String username; private String password; private Indirizzo indirizzo; public Indirizzo getindirizzo() { return this.indirizzo; public void setindirizzo(indirizzo indirizzo) { this.indirizzo = indirizzo; File Indirizzo.java package domain; public class Indirizzo { private String via; private int numerocivico; private String cap; private String citta; public Indirizzo() { public String getvia() { return via; 32

33 public void setvia(string via) { this.via = via; public int getnumerocivico() { return numerocivico; public void setnumerocivico(int numerocivico) { this.numerocivico = numerocivico; public String getcap() { return cap; public void setcap(string cap) { this.cap = cap; public String getcitta() { return citta; public void setcitta(string citta) { this.citta = citta; Hibernate Con Hibernate si utilizza l'elemento XML <component>, specificato nel file di mapping della classe entità per includere nella tabella le colonne che mapperanno le proprietà della classe che realizza il tipo UML (classe component). <component name="propertyname" class="classname"> <property name="property1" column="column_1"/> <property name="propertyn" column="column_n"/> </component> L'elemento <component> avrà come attributi il nome della proprietà istanza della classe component all'interno della classe entità (name) e il nome della classe component (class). Gli elementi figli <property> permettono il mapping delle proprietà della classe component. 33

34 Esempio: mapping di una classe component File Utente.hbm.xml <hibernate-mapping> <class name="domain.utente" table="utente"> <component name="indirizzo" class="domain.indirizzo"> <property name="via" column="via"/> <property name="numerocivico" column="numero_civico"/> <property name="cap" column="cap"/> <property name="citta" column="citta"/> </component> </class> </hibernate-mapping> SQL output CREATE TABLE utente ( username character varying(255) NOT NULL, password character varying(255) NOT NULL, via character varying(255), numero_civico integer, cap character varying(255), citta character varying(255), CONSTRAINT utente_pkey PRIMARY KEY (username ) ) Java Persistence API In applicazioni JPA, una classe che realizza un tipo UML non viene definita ma con l Nella classe entità, in corrispondenza della proprietà istanza della classe embeddable verrà inserità l Esempio: mapping di una classe embedded File Utente.java package domain; = "utente") public class Utente { private String username; private String password; private Indirizzo indirizzo; 34

35 @Embedded public Indirizzo getindirizzo() { return this.indirizzo; File Indirizzo.java package domain; import public class Indirizzo { private String = "numero_civico") private int numerocivico; private String cap; private String citta; Mapping di associazioni Il mapping di associazioni con Hibernate e JPA può essere effettuato secondo due modalità: Accorpamento della relazione ER Table join per la relazione ER Verranno ora presentate in dettaglio le diverse metodologie per il mapping dei più importanti tipi di associazione Mapping di associazioni senza attributi a responsabilità singola con molteplicità 1..1 e 0..1 Le classi di dominio ClassA e ClassB sono legate da un'associazione senza attributi con molteplicità 1..1 sulla quale ClassA ha responsabilità. ClassA ha una proprietà propertyb riferimento ad un'istanza di ClassB. 35

36 Esempio: associazione senza attributi a responsabilità singola con molteplicità 1..1 File Acquisto.java package domain; public class Acquisto { private long id; private Date data; private Utente effettuatoda; public Utente geteffettuatoda() { return this.effettuatoda; public void seteffettuatoda(utente effettuatoda) { this.effettuatoda = effettuatoda; Accorpamento della relazione ER Nella tabella table_a viene inserita una colonna column_b e viene definito un vincolo di foreign key tra la colonna column_b e la chiave primaria di table_b. Hibernate Viene utilizzato l elemento <many-to-one>. <many-to-one name= propertyb class= ClassB column= column_b not-null= true /> L'attributo not-null= true definisce un vincolo NOT NULL per la colonna column_b, in questo modo si garantisce che ogni istanza di ClassA sia collegata a un'istanza di ClassB. Se questo attributo non viene definito, si avrà un'associazione con molteplicità 0..1, perchè sarà possibile introdurre istanze di ClassA con valore null alla colonna column_b, quindi non collegate a nessuna istanza di ClassB. 36

37 Questo approccio non è consigliato perchè introdurrebbe valori nulli che degraderebbero la qualità dei dati persistenti. Esempio: mapping associazione senza attributi a responsabilità singola con molteplicità 1..1 File Acquisto.hbm.xml <hibernate-mapping> <class name="domain.acquisto" table="acquisto"> <many-to-one name="effettuatoda" class="domain.utente" column="username" not-null="true"/> </class> </hibernate-mapping> SQL output CREATE TABLE acquisto ( id bigint NOT NULL, data date, username character varying(255) NOT NULL, CONSTRAINT acquisto_pkey PRIMARY KEY (id ), CONSTRAINT fk98d0bfebf2625d59 FOREIGN KEY (username) REFERENCES utente (username) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) CREATE TABLE utente ( username character varying(255) NOT NULL, password character varying(255) NOT NULL, CONSTRAINT utente_pkey PRIMARY KEY (username ) ) In caso di associazione one-to-one, la strategia è identica al caso di mapping di associazione senza attributi con molteplicità 1..1 con l'unica differenza dell'attributo unique= true per definire un vincolo di chiave sulla colonna column_b. <many-to-one name= propertyb class= ClassB column= column_b not-null= true unique= true /> 37

38 Esempio: Mapping di associazione senza attributi a responsabilità singola tipo one-to-one File Utente.java package domain; public class Utente { private String username; private String password; private Indirizzo indirizzo; public Indirizzo getindirizzo() { return this.indirizzo; public void setindirizzo(indirizzo indirizzo) { this.indirizzo = indirizzo; File Utente.hbm.xml <hibernate-mapping> <class name="domain.utente"> <many-to-one name="indirizzo" class="domain.indirizzo" column="id_indirizzo" unique="true" not-null="true"/> </class> </hibernate-mapping> SQL output CREATE TABLE utente ( 38

39 ) username character varying(255) NOT NULL, password character varying(255) NOT NULL, id_indirizzo bigint NOT NULL, CONSTRAINT utente_pkey PRIMARY KEY (username ), CONSTRAINT fkce393bf9c9c5d612 FOREIGN KEY (id_indirizzo) REFERENCES indirizzo (id_indirizzo) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT utente_indirizzo_key UNIQUE (id_indirizzo ) CREATE TABLE indirizzo ( id_indirizzo bigint NOT NULL, via character varying(255), numero_civico integer, cap character varying(255), citta character varying(255), CONSTRAINT indirizzo_pkey PRIMARY KEY (id_indirizzo ) ) Java Persistence API Sviluppando con JPA, si potranno avere i medesimi risultati avuti con Hibernate utilizzando l per specificare la colonna column_b per nullable=false) La proprietà nullable=false definisce un vincolo NOT NULL per la colonna propb per garantire che l associazione sia di molteplicità Esempio: Mapping di associazione senza attributi a responsabilità singola con molteplicità 1..1 File Acquisto.java package domain; = "acquisto") public class Acquisto { private long id; private Date data; private = "username", nullable = false) public Utente geteffettuatoda() { return this.effettuatoda; 39

40 Per quanto riguarda le associazioni one-to-one, viene utilizzato il metodo spiegato per le associazioni generiche di tipo 1..1 con l aggiunta della proprietà unique=true in modo analogo unique=true, nullable=false) Esempio: Mapping di associazione senza attributi a responsabilità singola tipo one-to-one File Utente.java package domain; = "utente") public class Utente { private String username; private String password; private Set<String> numtelefono; private = "id_indirizzo", unique = true, nullable = false) public Indirizzo getindirizzo() { return this.indirizzo; File Indirizzo.java package domain; = "indirizzo") public class Indirizzo { private long id; private String via; private int numerocivico; private String cap; private String citta; public Indirizzo() { 40

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

Configurazione di base. Dott. Doria Mauro doriamauro@gmail.com 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

Dettagli

Mappare il DB senza XML. Introduzione alle annotation di Hibernate3

Mappare il DB senza XML. Introduzione alle annotation di Hibernate3 Introduzione alle annotation di Hibernate3 a cura di Lucio Benfante Hibernate Hibernate è un framework che realizza un object/relational mapping (ORM) fra oggetti Java e strutture di un database relazionale

Dettagli

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari: SQL SQL (pronunciato anche come l inglese sequel: acronimo di Structured Query Language (linguaggio di interrogazione strutturato Linguaggio completo che presenta anche proprietà di: DDL (Data Definition

Dettagli

Progettaz. e sviluppo Data Base

Progettaz. e sviluppo Data Base Progettaz. e sviluppo Data Base! Progettazione Basi Dati: Metodologie e modelli!modello Entita -Relazione Progettazione Base Dati Introduzione alla Progettazione: Il ciclo di vita di un Sist. Informativo

Dettagli

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

Siti web centrati sui dati Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Architettura MVC-2: i JavaBeans

Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans Alberto Belussi anno accademico 2008/2009 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Corso di Informatica (Basi di Dati)

Corso di Informatica (Basi di Dati) Corso di Informatica (Basi di Dati) Lezione 6 (15 gennaio 2009) Linguaggio SQL: Data Definition Language (DDL) Da: Atzeni, Ceri, Paraboschi, Torlone - Basi di Dati Lucidi del Corso di Basi di Dati 1, Prof.

Dettagli

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

Università degli Studi di Bologna Facoltà di Ingegneria. Tecnologie Web L-A A.A. 2014 2015. Esercitazione 08 DAO e Hibernate Università degli Studi di Bologna Facoltà di Ingegneria Tecnologie Web L-A A.A. 2014 2015 Esercitazione 08 DAO e Hibernate Agenda Pattern DAO e framework Hibernate progetto d'esempio relativo alla gestione

Dettagli

Al giorno d oggi, i sistemi per la gestione di database

Al giorno d oggi, i sistemi per la gestione di database Introduzione Al giorno d oggi, i sistemi per la gestione di database implementano un linguaggio standard chiamato SQL (Structured Query Language). Fra le altre cose, il linguaggio SQL consente di prelevare,

Dettagli

I Sistemi Informativi

I Sistemi Informativi I Sistemi Informativi Definizione Un Sistema Informativo è un mezzo per acquisire, organizzare, correlare, elaborare e distribuire le informazioni che riguardano una realtà che si desidera descrivere e

Dettagli

Realizzazione di una classe con un associazione

Realizzazione di una classe con un associazione Realizzazione di una classe con un associazione Nel realizzare una classe che è coinvolta in un associazione, ci dobbiamo chiedere se la classe ha responsabilità sull associazione. Diciamo che una classe

Dettagli

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

Breve introduzione curata da Alessandro Benedetti. Struts2-Introduzione e breve guida Breve introduzione curata da Alessandro Benedetti Struts2-Introduzione e breve guida 22-11- 2008 1 Struts 2 Costruisci,attiva e mantieni! Apache Struts 2 è un framework elegante ed estensibile per creare

Dettagli

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010) Sapienza - Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Corso di Laurea in Ingegneria Informatica ed Automatica, Ingegneria dei Sistemi Informatici Esercitazioni

Dettagli

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da ARPA Fonte Dati Regione Toscana Redatto da L. Folchi (TAI) Rivisto da Approvato da Versione 1.0 Data emissione 06/08/13 Stato DRAFT 1 Versione Data Descrizione 1,0 06/08/13 Versione Iniziale 2 Sommario

Dettagli

Organizzazione degli archivi

Organizzazione degli archivi COSA E UN DATA-BASE (DB)? è l insieme di dati relativo ad un sistema informativo COSA CARATTERIZZA UN DB? la struttura dei dati le relazioni fra i dati I REQUISITI DI UN DB SONO: la ridondanza minima i

Dettagli

Definizione di domini

Definizione di domini Definizione di domini Come nei linguaggi ad alto livello (es. C) è possibile definire nuovi domini (tipi di dati) a partire da quelli predefiniti, anche se il costruttore è più limitato. create domain

Dettagli

Schema della base di dati del Catalogo dei Dati della Pubblica Amministrazione Renzo Orsini

Schema della base di dati del Catalogo dei Dati della Pubblica Amministrazione Renzo Orsini Schema della base di dati del Catalogo dei Dati della Pubblica Amministrazione Renzo Orsini Dipartimento di Scienze Ambientali, Informatica e Statistica Università Ca Foscari Venezia La base di dati del

Dettagli

Laboratorio di Basi di Dati e Web

Laboratorio di Basi di Dati e Web Laboratorio di Basi di Dati e Web Docente: Alberto Belussi Lezione 1 SQL Structured Query Language SQL è stato definito nel 1973 ed è oggi il linguaggio più diffuso per i DBMS relazionali Il linguaggio

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l. Progetto SITI Manuale Utente SITI-Reports ABACO S.r.l. ABACO S.r.l. C.so Umberto, 43 46100 Mantova (Italy) Tel +39 376 222181 Fax +39 376 222182 www.abacogroup.eu e-mail : info@abacogroup.eu 02/03/2010

Dettagli

Gestione delle tabelle

Gestione delle tabelle Linguaggio SQL: fondamenti Creazione di una tabella Modifica della struttura di una tabella Cancellazione di una tabella Dizionario dei dati Integrità dei dati 2 Creazione di una tabella (1/3) Si utilizza

Dettagli

BASI DI DATI - : I modelli di database

BASI DI DATI - : I modelli di database BASI DI DATI - : I modelli di database DAL 1960 ci si e' orientati verso 3 direzioni: 1 MODELLO GERARCHICO Se i dati si presentano naturalmente in una struttura ad albero (ES. File System) Limiti: rigidità

Dettagli

Introduzione JDBC interfaccia java.sql driver caricare i driver

Introduzione JDBC interfaccia java.sql driver caricare i driver J D B C DISPENSE Introduzione JDBC (Java Database Connectivity) è un interfaccia completamente Java utilizzata per eseguire istruzioni SQL sui database. L'API JDBC si trova nel pacchetto java.sql; contiene

Dettagli

Volumi di riferimento

Volumi di riferimento Simulazione seconda prova Esame di Stato Gestione di un centro agroalimentare all ingrosso Parte prima) Un nuovo centro agroalimentare all'ingrosso intende realizzare una base di dati per l'attività di

Dettagli

Progetto: ARPA Fonte Dati. ARPA Fonte Dati. Regione Toscana. Manuale Amministratore

Progetto: ARPA Fonte Dati. ARPA Fonte Dati. Regione Toscana. Manuale Amministratore ARPA Fonte Dati Regione Toscana 1 Redatto da L. Folchi (TAI) Rivisto da Approvato da Versione 1.1 Data emissione 09/10/13 Stato FINAL 2 Versione Data Descrizione 1,0 06/08/13 Versione Iniziale 1.1 09/10/2013

Dettagli

Strumenti di modellazione. Gabriella Trucco

Strumenti di modellazione. Gabriella Trucco Strumenti di modellazione Gabriella Trucco Linguaggio di modellazione Linguaggio formale che può essere utilizzato per descrivere (modellare) un sistema Il concetto trova applicazione soprattutto nell

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Object-Relational Mapping

Object-Relational Mapping Object-Relational Mapping Versione Preliminare Antonella Poggi Dipartimento di informatica e Sistemistica Sapienza Università di Roma Progetto di Applicazioni Software Anno accademico 2008-2009 Questi

Dettagli

Progettazione della componente applicativa

Progettazione della componente applicativa 7 Progettazione della componente applicativa In questo capitolo illustreremo la progettazione della componente applicativa di un sistema informativo. La metodologia da noi utilizzata sarà basata sull utilizzo

Dettagli

Modellazione dei dati in UML

Modellazione dei dati in UML Corso di Basi di Dati e Sistemi Informativi Modellazione dei dati in UML Angelo Montanari Dipartimento di Matematica e Informatica Università degli Studi di Udine Introduzione UML (Unified Modeling Language):

Dettagli

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS) 1 SQL Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS) a.a. 2014/2015 http://www.di.uniba.it/~lisi/courses/basi-dati/bd2014-15.htm dott.ssa Francesca A. Lisi francesca.lisi@uniba.it

Dettagli

Linguaggio C. Fondamenti. Struttura di un programma.

Linguaggio C. Fondamenti. Struttura di un programma. Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C La nascita del linguaggio C fu dovuta all esigenza di disporre di un Linguaggio ad alto livello adatto alla realizzazione

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E08 Soluzione Esercizi F. Gasparetti, C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf1/ Soluzione Esercizi

Dettagli

Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database

Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database Uso delle basi di dati Uso delle Basi di Dati Il modulo richiede che il candidato comprenda il concetto di base dati (database) e dimostri di possedere competenza nel suo utilizzo. Cosa è un database,

Dettagli

Linguaggio SQL: fondamenti D B M G. Gestione delle tabelle

Linguaggio SQL: fondamenti D B M G. Gestione delle tabelle Linguaggio SQL: fondamenti Creazione di una tabella Modifica della struttura di una tabella Cancellazione di una tabella Dizionario dei dati Integrità dei dati 2 2007 Politecnico di Torino 1 Creazione

Dettagli

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino Integration Services Project SQL Server 2005 Integration Services Permette di gestire tutti i processi di ETL Basato sui progetti di Business Intelligence di tipo Integration services Project SQL Server

Dettagli

1. BASI DI DATI: GENERALITÀ

1. BASI DI DATI: GENERALITÀ 1. BASI DI DATI: GENERALITÀ BASE DI DATI (DATABASE, DB) Raccolta di informazioni o dati strutturati, correlati tra loro in modo da risultare fruibili in maniera ottimale. Una base di dati è usualmente

Dettagli

UNIVERSITA DI FIRENZE Facoltà di Ingegneria. Persistenza Applicazioni Enterprise Uso dei modelli

UNIVERSITA DI FIRENZE Facoltà di Ingegneria. Persistenza Applicazioni Enterprise Uso dei modelli UNIVERSITA DI FIRENZE Facoltà di Ingegneria Persistenza Applicazioni Enterprise Uso dei modelli 1 IL problema della persistenza APPLICAZIONE (programmi) (oggetti) DATI PERSISTENTI (file, record) (basi

Dettagli

Corso sul linguaggio SQL

Corso sul linguaggio SQL Corso sul linguaggio SQL Modulo L2B (SQL) 2.1 Comandi sui database 1 Prerequisiti Introduzione ai DB Linguaggi per database Tipi fondamentali di dati 2 1 Introduzione In questa Unità introduciamo il linguaggio

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Programmazione in Java Parte I: Fondamenti

Programmazione in Java Parte I: Fondamenti Programmazione in Java Parte I: Fondamenti Lezione 1 Dott. Marco Faella Riferimenti Testi consigliati: Progettazione del software e design pattern in Java di C.S. Horstmann Apogeo Gli esempi di codice

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 12 ADT: Lista, Pila, Coda A. Miola Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf2/ ADT: Lista, Pila, Coda 1 Contenuti!Tipo

Dettagli

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Reflection in Java 1 Reflection Riflessione

Dettagli

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: storia SQL SQL: concetti base originariamente "Structured Query Language", ora "nome proprio" linguaggio con varie funzionalità: contiene sia il DDL sia il DML ne esistono varie versioni vediamo gli aspetti essenziali,

Dettagli

PSNET UC RUPAR PIEMONTE MANUALE OPERATIVO

PSNET UC RUPAR PIEMONTE MANUALE OPERATIVO Pag. 1 di 17 VERIFICHE E APPROVAZIONI VERSIONE V01 REDAZIONE CONTROLLO APPROVAZIONE AUTORIZZAZIONE EMISSIONE NOME DATA NOME DATA NOME DATA PRATESI STATO DELLE VARIAZIONI VERSIONE PARAGRAFO O DESCRIZIONE

Dettagli

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

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti Capitolo 3 L applicazione Java Diagrammi ER Dopo le fasi di analisi, progettazione ed implementazione il software è stato compilato ed ora è pronto all uso; in questo capitolo mostreremo passo passo tutta

Dettagli

Lezione V. Aula Multimediale - sabato 29/03/2008

Lezione V. Aula Multimediale - sabato 29/03/2008 Lezione V Aula Multimediale - sabato 29/03/2008 LAB utilizzo di MS Access Definire gli archivi utilizzando le regole di derivazione e descrivere le caratteristiche di ciascun archivio ASSOCIAZIONE (1:1)

Dettagli

SAPIENZA Università di Roma, Facoltà di Ingegneria

SAPIENZA Università di Roma, Facoltà di Ingegneria SAPIENZA Università di Roma, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE Laurea in Ingegneria Informatica Prof. E.Casalicchio A.A. 2008/09 QUARTA PARTE: Soluzioni Esercizi 13-23 Soluzione

Dettagli

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Programmazione Object Oriented in Java

Dettagli

Lezione 9. Applicazioni tradizionali

Lezione 9. Applicazioni tradizionali Lezione 9 Applicazioni tradizionali Pag.1 Sommario Concetti trattati in questa lezione: SQL nel codice applicativo Cursori API native ODBC Pag.2 SQL nel codice applicativo I comandi SQL possono essere

Dettagli

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment Obiettivi d esame PHP Developer Fundamentals on MySQL Environment 1.0 Ambiente di sviluppo 1.1 Web server e database MySQL Comprendere la definizione dei processi che si occupano di fornire i servizi web

Dettagli

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP Accademia Futuro info@accademiafuturo.it Programma Generale del Corso Analista Programmatore Web PHP Tematiche Trattate

Dettagli

DBMS. Esempi di database. DataBase. Alcuni esempi di DBMS DBMS. (DataBase Management System)

DBMS. Esempi di database. DataBase. Alcuni esempi di DBMS DBMS. (DataBase Management System) (DataBase Management System) Sistemi di ges3one di basi di da3 Un Database Management System è un sistema software progettato per consentire la creazione e manipolazione efficiente di database (collezioni

Dettagli

Corso sul linguaggio SQL

Corso sul linguaggio SQL Corso sul linguaggio SQL Modulo L2B (SQL) 2.2 Comandi sulle tabelle 1 Prerequisiti Introduzione ai DB Tabelle, relazioni e attributi Chiave primaria Chiave esterna Vincoli di integrità 2 1 Introduzione

Dettagli

Progettazione : Design Pattern Creazionali

Progettazione : Design Pattern Creazionali Progettazione : Design Pattern Creazionali Alessandro Martinelli alessandro.martinelli@unipv.it 30 Novembre 2010 Progettazione : Design Pattern Creazionali Aspetti generali dei Design Pattern Creazionali

Dettagli

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL Basi di dati Il Linguaggio SQL Data Definition Language (DDL) Data Definition Language: insieme di istruzioni utilizzate per modificare la struttura della base di dati Ne fanno parte le istruzioni di inserimento,

Dettagli

Test di unità con JUnit4

Test di unità con JUnit4 Test di unità con JUnit4 Richiamo sul test di unità Il test d unità è una metodologia che permette di verificare il corretto funzionamento di singole unità di codice in determinate condizioni. Nel caso

Dettagli

SQL - Tipi di dato Il linguaggio SQL

SQL - Tipi di dato Il linguaggio SQL SQL - Tipi di dato Il linguaggio SQL I tipi di dato in SQL:1999 si suddividono in tipi predefiniti tipi strutturati tipi user-defined ci concentreremo sui tipi predefiniti i tipi predefiniti sono suddivisi

Dettagli

Esercitazione 4 JDBC

Esercitazione 4 JDBC JDBC Obiettivi dell esercitazione Familiarizzare con l'organizzazione dell'ambiente di lavoro per la realizzazione di applicazioni Java Utilizzare i costrutti di base della libreria JDBC per 1. la gestione

Dettagli

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore

Relazioni tra oggetti e classi : Composizione. Relazioni tra oggetti e classi : esempio di Aggregazione. classe contenitore Relazioni tra oggetti e classi : Generalizzazione Fondamenti di Informatica II 20. Laboratorio 6 Collegamenti e associazioni Le relazioni di tipo generalizzazione (specializzazione), servono per poter

Dettagli

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici Il linguaggio SQL Il linguaggio SQL il linguaggio SQL è un linguaggio per la definizione e la manipolazione dei dati, sviluppato originariamente presso il laboratorio IBM a San Jose (California) è diventato

Dettagli

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione SQL DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE SQL è più di un semplice linguaggio di interrogazione! Linguaggio di definizione dati (Data-definition language, DDL):! Crea/distrugge/modifica relazioni

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

PMF Integration Tools

PMF Integration Tools PMF Integration Tools Strumenti di integrazione di PMF con l infrastruttura del cliente Architettura e modalità di interazione Cliente - documentazione - Redatto da Francesco Buratto Redatto il 01/10/2012

Dettagli

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti Nascita di Java L uscita di Java, verso la metà degli anni novanta, fu accolta con molto entusiasmo dalla comunità dei programmatori e dei provider di servizi internet perché permetteva agli utenti del

Dettagli

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

LA GESTIONE DELLE VISITE CLIENTI VIA WEB LA GESTIONE DELLE VISITE CLIENTI VIA WEB L applicazione realizzata ha lo scopo di consentire agli agenti l inserimento via web dei dati relativi alle visite effettuate alla clientela. I requisiti informatici

Dettagli

Il linguaggio SQL: DDL di base

Il linguaggio SQL: DDL di base Il linguaggio SQL: DDL di base Sistemi Informativi T Versione elettronica: 04.1.SQL.DDLbase.pdf SQL: caratteristiche generali SQL (Structured Query Language) èil linguaggio standard de facto per DBMS relazionali,

Dettagli

Guida all uso di Java Diagrammi ER

Guida all uso di Java Diagrammi ER Guida all uso di Java Diagrammi ER Ver. 1.1 Alessandro Ballini 16/5/2004 Questa guida ha lo scopo di mostrare gli aspetti fondamentali dell utilizzo dell applicazione Java Diagrammi ER. Inizieremo con

Dettagli

Basi di dati SQL. Standardizzazione di SQL. Linguaggi di Interrogazione: SQL. Prof.Angela Bonifati

Basi di dati SQL. Standardizzazione di SQL. Linguaggi di Interrogazione: SQL. Prof.Angela Bonifati Basi di dati Linguaggi di Interrogazione: SQL Prof.Angela Bonifati 1 SQL Il nome stava per Structured Query Language Più che un semplice linguaggio di query: si compone di una parte DDL e di una DML DDL:

Dettagli

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Esercizio 1 Considerate la seguente gerarchia di classi: class A { public void print(string s) { System.out.println(s); public void m1() { print("a.m1");

Dettagli

Informatica per le discipline umanistiche 2 lezione 10

Informatica per le discipline umanistiche 2 lezione 10 Informatica per le discipline umanistiche 2 lezione 10 Parte III: il computer come strumento per l interazione e la comunicazione Si è parlato di identità Parte III: il computer come strumento per l interazione

Dettagli

Generazione Automatica di Asserzioni da Modelli di Specifica

Generazione Automatica di Asserzioni da Modelli di Specifica UNIVERSITÀ DEGLI STUDI DI MILANO BICOCCA FACOLTÀ DI SCIENZE MATEMATICHE FISICHE E NATURALI Corso di Laurea Magistrale in Informatica Generazione Automatica di Asserzioni da Modelli di Specifica Relatore:

Dettagli

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione IMPLEMENTAZIONE DEL FILE SYSTEM 9.1 Implementazione del File System Struttura del File System Implementazione Implementazione delle Directory Metodi di Allocazione Gestione dello spazio libero Efficienza

Dettagli

JDBC versione base. Le classi/interfacce principali di JDBC

JDBC versione base. Le classi/interfacce principali di JDBC JDBC versione base Java Database Connectivity è il package Java per l accesso a database relazionali il package contiene interfacce e classi astratte uno dei pregi è la completa indipendenza del codice

Dettagli

Domini elementari, 2. Basi di dati. Domini elementari, 4. Domini elementari, 3. Domini definiti dagli utenti. Domini elementari, 5

Domini elementari, 2. Basi di dati. Domini elementari, 4. Domini elementari, 3. Domini definiti dagli utenti. Domini elementari, 5 Domini elementari, Basi di dati Linguaggi di Interrogazione: SQL Prof.Angela Bonifati Bit Valori booleani (vero/falso), singoli o in sequenza (la sequenza può essere di lunghezza variabile) Sintassi: bit

Dettagli

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due:

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due: Il modello relazionale I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due: 1. forniscono sistemi semplici ed efficienti per rappresentare

Dettagli

Sistemi di Elaborazione delle Informazioni (C.I. 15) Access

Sistemi di Elaborazione delle Informazioni (C.I. 15) Access Università degli Studi di Palermo Dipartimento di Ingegneria Informatica Sistemi di Elaborazione delle Informazioni (C.I. 15) Anno Accademico 2009/2010 Docente: ing. Salvatore Sorce Access C.d.L. in Igiene

Dettagli

Introduzione ai database relazionali

Introduzione ai database relazionali Introduzione ai database relazionali Tabelle Un database (DB) è costituito da un insieme di file che memorizzano dati opportunamente organizzati Nei database relazionale tale organizzazione è costituita

Dettagli

Esercitazione n 4. Obiettivi

Esercitazione n 4. Obiettivi Esercitazione n 4 Obiettivi Progettare e implementare per intero un componente software in Java Linguaggio Java: Classi astratte Utilizzo di costruttori e metodi di superclasse Polimorfismo Esempio guida:

Dettagli

MySQL Database Management System

MySQL Database Management System MySQL Database Management System http://www.mysql.com/ DATABASE RELAZIONALI Un database è una collezione strutturata di informazioni. I database sono delle strutture nelle quali è possibile memorizzare

Dettagli

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Vincoli di Integrità Approccio dichiarativo alla loro implementazione Vincoli di Integrità Approccio dichiarativo alla loro implementazione Antonella Poggi Dipartimento di informatica e Sistemistica SAPIENZA Università di Roma Progetto di Applicazioni Software Anno accademico

Dettagli

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

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012 Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono

Dettagli

Soluzione dell esercizio del 2 Febbraio 2004

Soluzione dell esercizio del 2 Febbraio 2004 Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo

Dettagli

Abstract Data Type (ADT)

Abstract Data Type (ADT) Abstract Data Type Pag. 1/10 Abstract Data Type (ADT) Iniziamo la nostra trattazione presentando una nozione che ci accompagnerà lungo l intero corso di Laboratorio Algoritmi e Strutture Dati: il Tipo

Dettagli

Stefania Marrara - Esercitazioni di Tecnologie dei Sistemi Informativi. Integrazione di dati di sorgenti diverse

Stefania Marrara - Esercitazioni di Tecnologie dei Sistemi Informativi. Integrazione di dati di sorgenti diverse Politecnico di Milano View integration 1 Integrazione di dati di sorgenti diverse Al giorno d oggi d la mole di informazioni che viene gestita in molti contesti applicativi è enorme. In alcuni casi le

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Programmazione Java Avanzata Spring - JDBC

Programmazione Java Avanzata Spring - JDBC Programmazione Java Avanzata Spring - JDBC Ing. Gianluca Caminiti Riferimenti Spring http://www.springsource.org/ (scaricate il reference) Beginning Spring 2 - From Novice to Professional. APress. 2008

Dettagli

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere. UML e i Casi d USO I casi d uso specificano una sequenza di azioni che producono un risultato visibile agli attori del sistema. Essi nascono per fornire descrizioni delle capacità del sistema. I casi d

Dettagli

RIFERIMENTI ATTORI GLOSSARIO. ERRORI COMUNI REV. REQUISITI INGEGNERIA DEL SOFTWARE Università degli Studi di Padova

RIFERIMENTI ATTORI GLOSSARIO. ERRORI COMUNI REV. REQUISITI INGEGNERIA DEL SOFTWARE Università degli Studi di Padova RIFERIMENTI ERRORI COMUNI REV. REQUISITI INGEGNERIA DEL SOFTWARE Università degli Studi di Padova Dipartimento di Matematica Corso di Laurea in Informatica, A.A. 2014 2015 I riferimenti devono essere precisi

Dettagli

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste versione 2.1 24/09/2015 aggiornamenti: 23-set-2015; 24-set-2015 Autore: Francesco Brunetta (http://www.francescobrunetta.it/)

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

Specifiche Tecnico-Funzionali

Specifiche Tecnico-Funzionali AuthSIAR - Modulo di Autenticazione e Autorizzazione Sardegna IT S.r.l. Analisi Tecnico-Funzionale Assessorato all Agricoltura della Regione Sardegna SIAR Sistema Informativo Agricolo Regionale AuthSIAR

Dettagli

Corso Sistemi Informativi Avanzati. Programma 30 set 2015. Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Corso Sistemi Informativi Avanzati. Programma 30 set 2015. Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende. Programma 30 set 205 Installazione Macchina Virtuale Introduzione alla BI nelle Aziende Introduzione SQL Macchina Virtuale È un emulazione di un computer su un altro computer Stesso punto di partenza per

Dettagli

Analisi e sviluppo di un componente per un ESB open source

Analisi e sviluppo di un componente per un ESB open source tesi di laurea Anno Accademico 2010/2011 relatore Ch.mo prof. Porfirio Tramontana correlatore Ing. Ciro Romano candidato Rosario Celotto Matr. 534/1459 Introduzione L attività svolta è stata l analisi

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione Airone Gestione Rifiuti Funzioni di Esportazione e Importazione Airone Funzioni di Esportazione Importazione 1 Indice AIRONE GESTIONE RIFIUTI... 1 FUNZIONI DI ESPORTAZIONE E IMPORTAZIONE... 1 INDICE...

Dettagli

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf Esercitazione 1 SQL: DDL e DML di base Sistemi Informativi T Versione elettronica: L01.2.DDLDMLbase.pdf Prime cose da fare Fare login sul PC usando lo username di Facoltà Procedura descritta qui: http://ccib.ing.unibo.it/content/account

Dettagli

Object Oriented Software Design

Object Oriented Software Design Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Object Oriented Software Design Corso di Tecniche di Programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria

Dettagli

Introduzione al mondo della persistenza. Dott. Doria Mauro doriamauro@gmail.com

Introduzione al mondo della persistenza. Dott. Doria Mauro doriamauro@gmail.com Hibernate Introduzione al mondo della persistenza Dott. Doria Mauro doriamauro@gmail.com La questione della persistenza Il modo dei database è complesso e le tecniche e le tecnologie sono molte. Per anni

Dettagli

Guida per la gestione del proprio profilo in Scopus utilizzando la piattaforma Scival di Elsevier

Guida per la gestione del proprio profilo in Scopus utilizzando la piattaforma Scival di Elsevier Guida per la gestione del proprio profilo in Scopus utilizzando la piattaforma Scival di Elsevier Lo scopo di questa guida è quello di spiegare come apportare delle modifiche al proprio profilo in Scopus

Dettagli