Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti...

45
UNIVERSITÀ DEGLI STUDI DI TRIESTE FACOLTÀ DI INGEGNERIA DIPARTIMENTO DI INGEGNERIA ED ARCHITETTURA Tesi di laurea in BASI DI DATI PROGETTAZIONE ED IMPLEMENTAZIONE DI UNA BASE DI DATI PER LA GESTIONE DI EMISSIONI INQUINANTI ALIMENTATA DA FILE XML Relatore: Chiar.mo prof. Maurizio Fermeglia Laureando: Francesco Occhioni Anno accademico: 2011-2012

Transcript of Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti...

Page 1: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

UNIVERSITÀ DEGLI STUDI DI TRIESTE

FACOLTÀ DI INGEGNERIA

DIPARTIMENTO DI INGEGNERIA ED ARCHITETTURA

Tesi di laurea in

BASI DI DATI

PROGETTAZIONE ED IMPLEMENTAZIONE DI UNA

BASE DI DATI PER LA GESTIONE DI EMISSIONI

INQUINANTI ALIMENTATA DA FILE XML

Relatore: Chiar.mo prof. Maurizio Fermeglia

Laureando: Francesco Occhioni

Anno accademico: 2011-2012

Page 2: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

I

A Tina e Angelo

Page 3: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

II

Indice 1.Introduzione ............................................................................................................. 1

2.Presentazione delle Richieste ..................................................................................... 2

3.Analisi delle richieste ................................................................................................. 2

4.Strumenti necessari allo sviluppo del Progetto ............................................................. 3

4.1 Hardware ............................................................................................................ 3

4.1.1. PC NOTEBOOK SONY VAIO VPCEB1S1E ......................................................... 3

4.2 Software ............................................................................................................. 3

4.2.1 SQL Server 2008 ........................................................................................... 3

4.2.2 Microsoft Access 2010 ................................................................................... 4

4.2.3 Eclipse .......................................................................................................... 4

4.2.4 Software Java ............................................................................................... 4

5. Prima di Cominciare .................................................................................................. 5

5.1 Attivazione Protocollo TCP/IP SQL Server 2008...................................................... 5

5.2 Librerie Eclipse .................................................................................................... 7

5.2.1 Driver JDBC .................................................................................................. 7

5.2.2 XMLBeans ..................................................................................................... 7

5.2.3 MyBatis ........................................................................................................ 7

5.2.4 Installazione Librerie ..................................................................................... 8

6. Studio del file XSD .................................................................................................... 9

6.1 Analisi Entità ..................................................................................................... 10

6.2 Analisi Relazioni ................................................................................................ 10

6.2.1 Presenza Country-CompetentAuthorityParty .................................................. 10

6.2.2 Presenza Country-Facility ............................................................................. 10

6.2.3 Rilevazioni Facility-Report ............................................................................ 10

6.2.4 Dettaglio Report-Chemical ........................................................................... 10

6.2.5 Associato A Report-Periodo .......................................................................... 11

6.3 Traduzione verso il modello Relazionale .............................................................. 11

6.3.1 PollutantReleaseAndTransferReport .............................................................. 11

6.3.2 CompetentAuthorityParty ............................................................................. 12

6.3.3 NationalID .................................................................................................. 12

6.3.4 PreviousNationalID ...................................................................................... 13

6.3.5 FacilityReport .............................................................................................. 13

6.3.6 Activity ....................................................................................................... 16

6.3.7 PollutantRelease .......................................................................................... 17

Page 4: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

III

6.3.8 PollutantTransfer ......................................................................................... 18

6.3.9 WasteTransfer ............................................................................................. 19

6.3.10 MethodUsed .............................................................................................. 20

6.3.11 WasteHandlerParty .................................................................................... 20

6.3.12 Address .................................................................................................... 21

6.3.13 CompetentAuthorityAddress ....................................................................... 21

6.3.14 FacilityAddress .......................................................................................... 22

6.3.15 TelecommunicationCommunication ............................................................. 22

6.3.16 EmailCommunication ................................................................................. 22

6.3.17 WebsiteCommunication ............................................................................. 23

6.3.18 GeographicalCoordinate ............................................................................. 23

6.3.19 ProductionVolume ..................................................................................... 23

6.3.20 ProductionVolumeQuantity ......................................................................... 23

6.3.21 PollutantMassQuantity ............................................................................... 24

6.3.22 WasteMassQuantity ................................................................................... 24

6.3.23 Quantity ................................................................................................... 24

6.4 Considerazioni ................................................................................................... 25

6.4.1 Valori Null ................................................................................................... 25

6.4.2 Tipi di Dato ................................................................................................. 25

6.5 Accorpamento Tabelle – Denormalizzazione ........................................................ 26

6.6 Scelta delle chiavi primarie ................................................................................. 26

6.7 Schema Finale ................................................................................................... 27

7. Creazione Applicativo per Caricare File XML .............................................................. 28

7.1 XmlBeans .......................................................................................................... 28

7.2 Creazione Oggetti-Tabelle Java ........................................................................... 28

7.2.1 PollutantReleaseAndTransferReport .............................................................. 29

7.2.2 Activity ....................................................................................................... 29

7.2.3 CompetentAuthorityParty ............................................................................. 29

7.2.4 PollutantRelease .......................................................................................... 29

7.2.5 PollutantReleaseMethodUsed ........................................................................ 30

7.2.6 PollutantTransfer ......................................................................................... 30

7.2.7 PollutantTransferMethodUsed ....................................................................... 30

7.2.8 TblWasteTransfer ......................................................................................... 30

7.2.9 TblWasteTransfer ......................................................................................... 30

7.2.10 WasteHandlerParty .................................................................................... 31

7.2.11 WasteHandlerParty .................................................................................... 31

Page 5: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

IV

7.2.12 ProductionVolume ...................................................................................... 31

7.3 Validazione File Xml ........................................................................................... 32

7.4 Mybatis ............................................................................................................. 33

7.4.1 Connessione al Server SQL........................................................................... 33

7.4.2 Mapping del DB ........................................................................................... 34

7.5 Interfaccia Grafica ............................................................................................. 35

7.5.1 Descrizione ................................................................................................. 35

7.5.2 Codice ........................................................................................................ 36

8.Conclusioni ............................................................................................................. 39

Bibliografia ................................................................................................................. 40

Indice delle figure ...................................................................................................... 40

Page 6: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

1

1.Introduzione La tesi proposta all’interno di questo documento andrà a trattare e sviluppare l’analisi e la

gestione di un sistema informativo, nella fattispecie di un database volto a raccogliere dati

storici riguardanti dati di inquinamento all’interno dell’unione europea e forniti da altri

sistemi informativi.

Tale sistema verrà sviluppato in ambiente proprietario SQL SERVER 2008 in modo da

mantenere la stessa struttura e logistica del complesso sistema informativo preesistente su

cui basarsi.

L’obbiettivo è quello di analizzare la struttura dei sistemi database preesistenti, nonché

studiare il modo in cui i database trasmettono le informazioni e le inviano al database da

creare. Il passo successivo consiste nel progettare il nuovo sistema secondo le leggi date

dalla normativa UE e le specifiche date dall’analisi precedentemente effettuata.

Lo sviluppo verrà realizzato interamente in locale per poi eventualmente porsi l’obbiettivo

di portare il sistema su macchina remota.

I capitoli della tesi sono così distribuiti:

• 2) e 3) presentano le specifiche richieste dal committente e la relativa analisi del

progetto;

• 4) descrive le strumentazioni hardware e software necessarie;

• 5) propone un setup per poter procedere nel progetto;

• 6) analizza e progetta la base di dati su cui operare;

• 7) crea l’applicativo per alimentare la base di dati con file XML;

• 8) propone migliorie e spunti futuri del lavoro creato.

Page 7: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

2

2.Presentazione delle Richieste Il commissionario del progetto non ha presentato particolari richieste se non quelle di un

sistema informativo funzionante e dalla struttura similare ai server forniti nei vari stati

d’Europa.

Il responsabile del progetto ha fornito le seguenti richieste:

• Distinguere all’interno del sistema quelle che sono le Nazioni di riferimento

• Avere una lista separata del gruppo di autorità competente

• Considerare diversi periodi di analisi dei dati

• Salvare all’interno di una datatable quelli che sono gli output forniti dai server

• Avere una versione in inglese del sistema

• Essere ad alto indice di usabilità

Oltretutto è già stata fornita una linea guida sulla struttura da seguire per la creazione del

sistema informativo.

3.Analisi delle richieste

Il progetto, per la sua realizzazione, richiede uno studio approfondito di strutture dati

utilizzabili principalmente su motore SQL Server o Access.

Non meno importante sarà lo studio approfondito della struttura del server in quanto un

errata progettazione potrebbe portare a problemi di incompatibilità non verificabile

immediatamente nella fase di test del sistema.

Ancor più interessante sarà riempire il database opportunamente progettato con una

struttura dati fornita da altri database esterni.

Page 8: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

3

4.Strumenti necessari allo sviluppo del Progetto Il progetto necessita dell’utilizzo del seguente elenco di hardware e software. Di seguito ne descriveremo le caratteristiche.

4.1 Hardware

4.1.1. PC Notebook SONY VAIO VPCEB1S1E È il portatile a disposizione del laureando, montante un processore INTEL CORE I5

DUALCORE e scheda grafica ATI MOBILITY RADEON HD 5650 con 1 GB di memoria

grafica dedicata, HARD DISK da 500 GB e 4 GB di RAM DDR III.

Figura 1: Sony Vaio VPCEB1S1E

4.2 Software

4.2.1 SQL Server 2008 È il DBMS che verrà utilizzato per l’intero sviluppo del progetto.

Page 9: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

4

4.2.2 Microsoft Access 2010 Software appartenente alla suite MICROSOFT OFFICE 2010, sarà utile per la gestione dei

dati contenuti nel database a disposizione per l’end-user.

4.2.3 Eclipse Eclipse è un ambiente di sviluppo integrato multi-linguaggio e multipiattaforma. Nello

specifico verrà utilizzato per la produzione di software applicativo in linguaggio Java. La

versione utilizzata è la Juno (4.2), rilasciata il 27 giugno 2012.

4.2.4 Software Java Java è un linguaggio di programmazione e una piattaforma di elaborazione sviluppati da

Sun Microsystems nel 1995. Dal download del software Java si ottiene Java Runtime

Environment (JRE). JRE è composto dalla Macchina virtuale Java (JVM), dalle classi core

della piattaforma Java e dalle librerie Java di supporto.

Page 10: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

5

5. Prima di Cominciare

5.1 Attivazione Protocollo TCP/IP SQL Server 2008 Attivando questo protocollo si ottiene il supporto al DB per le connessioni remote, la cui

procedura è descritta qui sotto (valida anche per SQL Server 2005):

1. Accedere al server a livello dati sul quale è definita l'istanza del database. 2. Fare clic sul pulsante Start, scegliere Tutti i programmi, Microsoft SQL Server

2005 o Microsoft SQL Server 2008, Strumenti di configurazione, quindi fare clic su Gestione configurazione SQL Server.

3. Nel riquadro della struttura ad albero fare clic su Servizi di SQL Server 2005 o Servizi di SQL Server 2008.

4. Nel riquadro dei risultati verificare che, nella colonna Stato, appaia In esecuzione accanto al nome di ogni servizio. Se è presente Arrestato, fare clic con il pulsante destro del mouse sul nome del servizio, quindi scegliere Avvia.

Figura 2: Attivazione Protocollo TCP/IP SQL Server 2008/1

5. Nel riquadro della struttura ad albero fare clic su Configurazione di rete SQL Server 2005 o Configurazione di rete SQL Server 2008 per espanderlo, quindi scegliere Protocolli per MSSQLServer/NomeIstanza. Se durante l'installazione è stata specificata l'istanza predefinita, il nome dell'istanza sarà MSSQLSERVER.

6. Nel riquadro dei risultati verificare che, nella colonna Stato, appaia Attivato accanto al nome del protocollo TCP/IP.

Page 11: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

6

Se appare Disattivato, fare clic con il pulsante destro del mouse su TCP/IP, quindi scegliere Attiva.

Figura 3: Attivazione Protocollo TCP/IP SQL Server 2008/2

7. Nel riquadro della struttura ad albero fare clic su Configurazione SQL Native Client per espanderlo, quindi fare clic su Protocolli client.

8. Nel riquadro dei risultati verificare che, nella colonna Stato, appaia Attivato accanto al nome del protocollo TCP/IP. Se appare Disattivato, fare clic con il pulsante destro del mouse su TCP/IP, quindi scegliere Attiva.

Figura 4: Attivazione Protocollo TCP/IP SQL Server 2008/3

Page 12: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

7

5.2 Librerie Eclipse

5.2.1 Driver JDBC JDBC è un'interfaccia di programmazione che lavora da tramite tra codice Java e database.

Più in particolare, JDBC racchiude una serie di classi che permettono l'accesso ad una base

di dati mediante metodi e schemi di funzionamento che sono intuitivi e perfettamente in

linea con lo stile di programmazione tipico del linguaggio di Sun. In sostanza, quindi, è

possibile connettersi ad un particolare database sfruttando un apposito driver JDBC,

costituito da una classe Java. Tutti i principali DBMS dispongono oramai di un driver JDBC

appositamente studiato. Esiste poi un particolare driver, chiamato ponte JDBC-ODBC, che

permette l'utilizzo di qualsiasi fonte di dati per la quale è disponibile un driver ODBC. Ogni

DBMS dotato di un'interfaccia ODBC, ad esempio Microsoft Access, può così essere

immediatamente sfruttato da Java e JSP, senza la necessità di un driver appositamente

studiato per la connettività da applicazioni Java. Tra JDBC ed il ponte ODBC, quindi, Java è

virtualmente dotato della possibilità di interagire con tutti i DBMS in circolazione.

5.2.2 XMLBeans XMLBeans è una libreria scritta dalla Apache che permette di manipolare il contenuto di un

file XML fornendo una visione a oggetti dei dati e implementando tutte le funzionalità

necessarie allo sviluppatore per gestire in modo automatico le operazioni di lettura,

scrittura e validazione di un file XML. Mediante XMLBeans è possibile generare delle classi

java che permettono di leggere, scrivere o validare un file xml.

5.2.3 MyBatis MyBatis è un framework per la persistenza che offre supporto per scrivere delle query,

delle stored procedures o mapping avanzati attraverso l’uso di SQL e semplici regole di

XML o attraverso l’uso delle Annotations. La principale caratteristica è che grazie a MyBatis

viene eliminata la necessità di scrivere codice JDBC, di settare manualmente i parametri di

connessione al DB e inoltre anche il retrieve dei risultati risulta essere automatico.

Page 13: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

8

5.2.4 Installazione Librerie Per installare il queste librerie all’interno del progetto java si è seguito il seguente

procedimento:

1. Eseguito il download delle librerie.

2. Nella cartella “lib” del progetto Java presente in Eclipse sono stati inseriti i file con

estensione .jar relativi.

3. In Eclipse click col tasto destro del mouse sul progetto java, poi “BuildPath” ->

“Configure BuildPath” e nella scheda “Libraries” click su “Add JARs…” e selezionato i

file .jar precedentemente inseriti.

Figura 5: Installazione Driver JDBC – XMLBeans - MyBatis

Page 14: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

9

6. Studio del file XSD

Una "XML Schema Definition" (XSD) è un esempio (instance) di schema XML scritto in

linguaggio XML Schema. Una XSD definisce il tipo di un documento XML in termini di

vincoli: quali elementi ed attributi possono apparire, in quale relazione reciproca, quale

tipo di dati può contenere, ed altro. Può essere usata anche con un programma di

validazione, al fine di accertare a quale tipo appartiene un determinato documento XML.

La differenza principale fra XSD ed altri linguaggi di descrizione del contenuto XML sta nel

fatto che XSD è stato sviluppato con l'intento che la determinazione della validità di un

documento possa produrre una collezione di informazioni aderenti a specifici tipi di dati.

In questo caso particolare il file XSD è fornito direttamente dalla UE al seguente indirizzo:

http://www.eionet.europa.eu/schemas/eprtr/PollutantReleaseAndTransferReport_2p0.xsd.

Si è proceduto quindi allo studio dello schema XML per poter ottenere uno schema Entity-

Relationship sul quale creare il database.

Lo schema che si ottiene è il seguente:

Figura 6: Schema Entity-Relationship

Page 15: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

10

6.1 Analisi Entità Si passa a questo punto ad analizzare in maniera esplicita e descrittiva le singole entità:

• Country: descrive lo stato membro di provenienza del report.

• CompetentAuthorityParty: descrive uno o più gruppi di autorità competenti

incaricate di rispondere alle richieste del pubblico.

• Facility: descrive nel dettaglio le imprese che riportano i dati inquinanti.

• Report: descrive nel dettaglio i dati inquinanti.

• Chemical: descrive il tipo di inquinamento (aria/terra/acqua) e il metodo

usato per la rilevazione dei dati.

• Period: descrive il periodo di rilevazione del dato (tipicamente annuale).

6.2 Analisi Relazioni Analogamente a quanto fatto con le entità, si analizzano ora le relazioni:

6.2.1 Presenza Country-CompetentAuthorityParty La relazione descrive la presenza di una o più autorità di competenza nello stato di

riferimento. A uno stato vengono associate più autorità le quali possono essere associate

ad uno ed un solo stato.

6.2.2 Presenza Country-Facility La relazione descrive la presenza di una o più Imprese all’interno dello stato di riferimento.

Come è logico pensare, per ogni stato sono presenti più Imprese, le quali vengono

associate ad uno ed un solo stato.

6.2.3 Rilevazioni Facility-Report Descrive le rilevazioni dei report d’inquinamento fatta da un’unica impresa. Per ogni

impresa possono essere associati più report.

6.2.4 Dettaglio Report-Chemical La relazione serve a descrivere più in dettaglio quelli che sono i report dell’azienda.

Page 16: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

11

6.2.5 Associato A Report-Periodo Descrive la relazione che intercorre tra un report e il suo periodo di rilevazione. Relazione

banale ma da tenere particolarmente d’occhio in quanto il database da creare necessita di

una classificazione storica dei dati.

6.3 Traduzione verso il modello Relazionale Il passo successivo consiste nell' analizzare singolarmente il file XSD fornito dall’Unione

Europea per progettare in dettaglio le tabelle che costituiranno il sistema informativo

cercando di far riferimento, per quanto possibile, allo schema Entity-Relationship creato.

6.3.1 PollutantReleaseAndTransferReport Reporting of the E-PRTR data

Attributo Descrizione Tipo di Dato Null

ReportingYear The calendar year for which

data on releases of pollutants

and off-site transfers is

gathered.

ReportingYearType

CountryID The Member State reporting. TextType

CoordinateSystemID The coordinate system used in

reporting of coordinates of the

facilities.

TextType

RemarkText Textual remark from MS. Will

not be published on the web-

site.

LongTextType SI

CompetentAuthorityParty One or more competent

authorities in charge to respond

to requests from the public.

CompetentAuthorityPartyType

FacilityReport A facility report for each facility

reporting E-PRTR data.

FacilityReportType

Page 17: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

12

6.3.2 CompetentAuthorityParty Describes details about the competent authority in charge to respond to requests from the

public.

Attributo Descrizione Tipo di Dato Null

Name The name of the

competent authority.

TextType

Address The address of the

competent authority.

CompetentAuthorityAddressType

TelephoneCommunication The phone number TelecommunicationCommunicationType

FaxCommunication The fax number. TelecommunicationCommunicationType

EmailCommunication The e-mail address EmailCommunicationType

ContactPersonName Name of contact

person. If reported,

data will be published.

TextType SI

6.3.3 NationalID The national identification of a facility.

Attributo Descrizione Tipo di Dato Null

NationalID The national

Identification of a

facility.

TextType

Page 18: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

13

6.3.4 PreviousNationalID The previously reported national identification of a facility.

Attributo Descrizione Tipo di Dato Null

NationalID The previously reported national

identification. If the national identification

has not changed or the facility has not

previously been reported, this must

correspond to the current national

identification.

NationalIDType

ReportingYear The reporting year of which the previous

national identification was reported. If the

facility has not previously been reported,

this must correspond to the current

reporting year.

ReportingYearType

6.3.5 FacilityReport Holds the reporting for a given facility

Attributo Descrizione Tipo di Dato Null

NationalID The national Identification of

the facility.

NationalIDType

PreviousNationalID The previously reported

national identification of the

facility

PreviousNationalIDType

ParentCompanyName Name of the parent company,

i.e. the company that owns or

controls the company

operating the facility.

Required unless

confidentiality is claimed.

TextType SI

FacilityName Name of the facility (operator

or owner). Required unless

confidentiality is claimed.

TextType SI

Page 19: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

14

Attributo Descrizione Tipo di Dato Null

Address The address of the facility.

Required unless

confidentiality is claimed.

FacilityAddressType SI

GeographicalCoordinate The coordinates of the

location of the facility should

be expressed in longitude and

latitude coordinates giving a

precision of the order of at

least +/- 500 meters and

referring to the geographical

centre of the site of the

facility.

GeographicalCoordinateType

RiverBasinDistrictID Identifies the river basin

district according to according

to Article 3(1) of Directive

2000/60/EC (“Water

Framework Directive”).

TextType

NACEMainEconomicActivityCode Identifies the NACE code

according to the NACE 2

revision and thereby the main

economic activity.

TextType

MainEconomicActivityName The main economic activity

corresponding to the NACE

code in plain text.

TextType SI

CompetentAuthorityPartyName identifies the competent

authority in MS for public

requests. Must correspond to

the name of one of the

CompetentAuthorityParty

elements.

TextType

ProductionVolume The total production volume

related to the main activity of

the facility.

ProductionVolumeType SI

TotalIPPCInstallationQuantity The total number of IPPC

installations covered by the

facility.

nonNegativeInteger SI

Page 20: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

15

Attributo Descrizione Tipo di Dato Null

OperationHours The number of operating

hours in reporting year.

nonNegativeInteger SI

TotalEmployeeQuantity The number of employees. nonNegativeInteger SI

NutsRegionID Identifies the region that the

facility belongs to as defined

by NUTS.

TextType SI

WebsiteCommunication The website address of the

facility. Will be published

even if protection of voluntary

data is claimed.

WebsiteCommunicationType SI

PublicInformation Additional information to be

published on web site as-is

(e.g. e-mail, contact person

etc.). Will be published even

if protection of voluntary data

is claimed.

LongTextType SI

ConfidentialIndicator Indicates if confidentiality for

mandatory data is claimed or

not. True marks

confidentiality, false marks no

confidentiality.

Boolean

ConfidentialCode Identifies the reason for

confidentiality according to

Directive 2003/4/EC, Article

4(2). Required if

confidentiality is claimed for

mandatory data.

TextType SI

ProtectVoluntaryData Indicates if voluntary data

should be protected or not. In

this case all voluntary data of

the facility is considered

protected with a few

exceptions at stated in the

descriptions of the individual

elements.

Boolean

Page 21: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

16

Attributo Descrizione Tipo di Dato Null

RemarkText Textual remark, e.g.

information in changes of the

history of the facility,

elaboration on the reason for

confidentiality etc. Will not be

published even if protection

of voluntary data is not

claimed.

LongTextType SI

Activity The reported Annex I

activities of the facility.

ActivityType

PollutantRelease The reported releases of

pollutants to air/water/land

reported for the facility.

PollutantReleaseType SI

PollutantTransfer The reported off-site transfer

of pollutants in waste-water

for the facility.

PollutantTransferType SI

WasteTransfer The reported off-site transfer

of pollutants in waste-water

for the facility.

WasteTransferType SI

6.3.6 Activity A reported E-PRTR Annex I Activity for a facility.

Attributo Descrizione Tipo di Dato Null

RankingNumeric Consecutive ranking of the activities

starting with 1. The activity with ranking

= 1 shall be the main PRTR activity.

positiveInteger

AnnexIActivityCode Identifies the Annex I activity according

to Regulation 166/2006 Annex I.

TextType

Page 22: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

17

6.3.7 PollutantRelease Describes releases of pollutant to air/water/land

Attributo Descrizione Tipo di Dato Null

MediumCode Identifies the environmental medium (air,

water, land).

TextType

PollutantCode The address of the competent authority. TextType

MethodBasisCode Identifies the basis of the main method used

(M/C/E).

TextType

MethodUsed Identifies the calculation and measurement

method(s) used for determination of the total

quantity. Required if method basis is M or C

and confidentiality is not claimed.

MethodUsedType SI

TotalQuantity Total quantity including accidental quantity

[kg/year]. Values below threshold are

considered voluntary and will not be published.

PollutantMassQuantityType

AccidentalQuantity Accidental quantity [kg/year]. PollutantMassQuantityType SI

ConfidentialIndicator Indicates if confidentiality is claimed or not.

True marks confidentiality, false marks no

confidentiality.

Boolean

ConfidentialCode Identifies the reason for confidentiality

according to Directive 2003/4/EC, Article 4(2).

For releases of pollutants the legal reasons for

confidentiality are restricted to Article 4(2)(b),

(c) and transferred. Required if confidentiality

is claimed.

TextType SI

RemarkText Textual remark, e.g. elaboration on the reason

for confidentiality. Will not be published.

LongTextType SI

Page 23: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

18

6.3.8 PollutantTransfer Describes off-site transfer of pollutant in waste-waster

Attributo Descrizione Tipo di Dato Null

PollutantCode Identifies the pollutant. If confidentiality

is claimed the pollutant group must be

reported instead of the individual

pollutant.

TextType

MethodBasisCode Identifies the basis of the main method

used (M/C/E).

TextType

MethodUsed Identifies the calculation and

measurement method(s) used for

determination of the quantity. Required

if method basis is M or C and

confidentiality is not claimed.

MethodUsedType SI

Quantity Total quantity [kg/year]. Values below

threshold are considered voluntary and

will not be published.

PollutantMassQuantityType

ConfidentialIndicator Indicates if confidentiality is claimed or

not. True marks confidentiality, false

marks no confidentiality.

Boolean

ConfidentialCode Identifies the reason for confidentiality

according to Directive 2003/4/EC, Article

4(2). Required if confidentiality is

claimed.

TextType SI

RemarkText Textual remark, e.g. elaboration on the

reason for confidentiality. Will not be

published.

LongTextType SI

Page 24: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

19

6.3.9 WasteTransfer Describes off-site transfer of waste (except in waste-waster)

Attributo Descrizione Tipo di Dato Null

WasteTypeCode Identifies the type of waste (non-

hazardous, hazardous within country

and hazardous outside country).

TextType

WasteTreatmentCode Identifies the waste treatment operation

(recovery or disposal). Required unless

confidentiality is claimed.

TextType SI

MethodBasisCode Identifies the basis of the main method

used (M/C/E).

TextType SI

Quantity Quantity [t/year]. Required unless

confidentiality is claimed.

WasteMassQuantityType SI

MethodUsed Identifies the calculation and

measurement method(s) used for

determination of the quantity. Required

if method basis is M or C and

confidentiality is not claimed.

MethodUsedType SI

ConfidentialIndicator Indicates if confidentiality is claimed or

not. True marks confidentiality, false

marks no confidentiality.

Boolean

ConfidentialCode Identifies the reason for confidentiality

according to Directive 2003/4/EC, Article

4(2). Required if confidentiality is

claimed.

TextType SI

RemarkText Textual remark, e.g. elaboration on the

reason for confidentiality. Will not be

published.

LongTextType SI

WasteHandlerParty Identifies the recoverer/disposer of the

waste. Required for transfer of

hazardous waste outside the country

unless confidentiality is claimed.

WasteHandlerPartyType SI

Page 25: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

20

6.3.10 MethodUsed Describes a measurement/calculation method used for determination of quantities of

pollutants and waste.

Attributo Descrizione Tipo di Dato Null

MethodTypeCode Identifies the type of method used

(CEN/ISO, ETS, etc.). Notice that the

method type “WEIGH” (i.e. weighing)

only is allowed for waste transfer.

TextType

Designation A short designation or description of the

method used. Required for some

method types as indicated in the list of

legal method type codes.

TextType SI

6.3.11 WasteHandlerParty Recoverer/Disposer of hazardous waste transferred outside the country

Attributo Descrizione Tipo di Dato Null

Name Name of recoverer/disposer. Required

unless confidentiality is claimed for the

WasteTransfer element.

TextType SI

Address The address of the recoverer/disposer.

Required unless confidentiality is claimed

for the WasteTransfer

AddressType SI

SiteAddress The address of the actual

recoverer/disposer site. Required unless

confidentiality is claimed for the

WasteTransfer element.

AddressType SI

Page 26: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

21

6.3.12 Address The base format for addresses in PRTR.

Attributo Descrizione Tipo di Dato Null

StreetName The name, expressed as text, of a street in the

address.

TextType SI

BuildingNumber The building number, expressed as text, in the

address.

TextType SI

CityName The name, expressed as text, of the city, town or

village in the address.

TextType SI

Attributo Descrizione Tipo di Dato Null

PostcodeCode The postcode, expressed as text, if the address. ShortTextType SI

CountryID The unique identifier of a country in the structured

address (Reference ISO 3166 and UN/ECE Rec 3).

TextType SI

6.3.13 CompetentAuthorityAddress The address for a competent authority. The country is assumed to correspond to the

country reporting.

Attributo Descrizione Tipo di Dato Null

StreetName The street name. TextType

BuildingNumber The building number. If reported, data will be

published..

TextType SI

CityName The Town/village. TextType

PostcodeCode The postal code. If reported, data will be published. ShortTextType SI

Page 27: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

22

6.3.14 FacilityAddress The format for addresses for facilities. The country is assumed to correspond to the

country reporting

Attributo Descrizione Tipo di Dato Null

StreetName The street name of the facility. Required unless

confidentiality is claimed.

TextType SI

BuildingNumber The building number of the facility TextType SI

CityName The Town/village of the facility. Required unless

confidentiality is claimed.

TextType SI

PostcodeCode The Postal code of the facility. Required unless

confidentiality is claimed.

ShortTextType SI

6.3.15 TelecommunicationCommunication Information necessary to establish an electronic telecommunication connection for the

purpose of a telephone or facsimile exchange (Fax or Telephone).

Attributo Descrizione Tipo di Dato Null

CompleteNumberText The text string of characters that make up the

complete number for this telecommunication.

ShortTextType

6.3.16 EmailCommunication An address for the delivery of electronic mail.

Attributo Descrizione Tipo di Dato Null

EmailURIID The Uniform Resource Identifier (URI) for this email

communication. Must contain an @

TextType

Page 28: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

23

6.3.17 WebsiteCommunication An address for the exchange of information from and to a website over the Internet.

Attributo Descrizione Tipo di Dato Null

WebsiteURIID The Uniform Resource Identifier (URI) of this website

communication. Must start with “http://”.

TextType

6.3.18 GeographicalCoordinate The latitude and longitude of a place, by which its relative situation on the globe is known.

Attributo Descrizione Tipo di Dato Null

LongitudeMeasure minInclusive value=”-180”

maxInclusive value=”180”

float

LatitudeMeasure minInclusive value=”-90”

maxInclusive value=”90”

float

6.3.19 ProductionVolume Attributo Descrizione Tipo di Dato Null

ProductName The product/product group TextType

Quantity The total volume. The unit must be

given in attribute unitCode

ProductionVolumeQuantityType

6.3.20 ProductionVolumeQuantity Production volume quantity. Units must be given in unitCode attribute.

Attributo Descrizione Tipo di Dato Null

QuantityType The UN/ECE Recommendation 20 code identifying the

unit for this quantity, such as “KGM” for kilograms.”

ShortTextType

Page 29: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

24

6.3.21 PollutantMassQuantity Pollutant mass quantity. Must be reported in kilograms with three significant digits.

Attributo Descrizione Tipo di Dato Null

QuantityType The UN/ECE Recommendation 20 code identifying the

unit for this quantity, such as “KGM” for kilograms.”

ShortTextType

6.3.22 WasteMassQuantity A data type for quantities.

Attributo Descrizione Tipo di Dato Null

QuantityType The quantity of waste must be reported in tonnes ShortTextType

6.3.23 Quantity A data type for quantities.

Attributo Descrizione Tipo di Dato Null

QuantityType The UN/ECE Recommendation 20 code identifying the

unit for this quantity, such as “KGM” for kilograms.”

ShortTextType

Page 30: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

25

6.4 Considerazioni A questo punto dell’analisi è necessario inserire alcune considerazioni fatte prima di

passare alla creazione effettiva delle tabelle e delle relazioni che intercorrono tra di esse.

6.4.1 Valori Null L’introduzione dei valori Null è stata fatta per ogni attributo ogniqualvolta che, nello

schema XML, è stata incontrata la dicitura: “minOccurs=”0””. Tale dicitura indica infatti

che l’elemento di riferimento può occorrere un numero pari a zero volte.

6.4.2 Tipi di Dato Durante l’analisi sono stati riscontrati dei tipi di dato a cui daremo un corrispettivo

significato per la creazione in SQl Server:

• ShortTextType: oggetto di tipo stringa con lunghezza variabile da 1 a 50

• TextType: oggetto di tipo stringa con lunghezza variabile da 1 a 255

• LongTextType: oggetto di tipo stringa con lunghezza variabile da 1 a 100000

• Float: numero in virgola mobile

• Boolean: valore Vero o Falso

• positiveInteger: valore intero maggiore di zero

• nonNegativeInteger: valore intero maggiore o uguale a zero

Gli altri tipi di dato rilevati non sono altro che “ponti di collegamento” con le altre tabelle,

andando a formare così delle relazioni considerando rispettivamente chiave primarie e

chiavi esterne.

Page 31: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

26

6.5 Accorpamento Tabelle – Denormalizzazione A questo punto si decide di accorpare alcune tabelle all’interno di tabelle più grandi

rinunciando così alla seconda forma normale per la quale si dovrebbero spezzare tabelle

che descrivono entità separate. Nello specifico verranno considerati i seguenti

accorpamenti:

• PollutantReleaseAndTransferReport

• CompetentAuthorityParty (Address, TelephoneCommunication, FaxCommunication,

EmailCommunication)

• FacilityReport (NationalID, PreviousNationalID, GeographicalCoordinate,

WebsiteCommunication)

• ProductionVolume (NationalID)

• Activity (NationalID)

• PollutantRelease

• PollutantTransfer

• WasteTransfer

• WasteHandlerParty

• PollutantRelaseMethodUsed

• PollutantTransferMethodUsed

• WasteTransferMethodUsed

Si riduce così il numero di tabelle da realizzare da 23 a 12.

6.6 Scelta delle chiavi primarie All’interno di ogni tabella vengono inserite come chiavi primarie degli ID che

rappresentano univocamente gli elementi della tabella e che serviranno a stabilire relazioni

con chiavi esterne appartenenti ad altre tabelle.

Per convenzione gli ID di ogni tabella prenderanno il nome ID[NomeTabella]. Le chiavi

esterne associate invece prenderanno il nome [NomeTabella]ID. Le chiavi primarie di ogni

tabella verranno generate automaticamente dal DBMS in modo tale che siano tutte

distinte. La generazione automatica degli ID viene imposto nelle proprietà del tipo di dato

settando: Identity = Yes, IdentityIncrement = 1, Identity Seed = 1.

Page 32: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

27

6.7 Schema Finale

Figura 7: Schema Finale Database

Page 33: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

28

7. Creazione Applicativo per Caricare File XML Il Linguaggio scelto per creare l’applicativo che leggerà il file XML e che andrà a popolare il

database SQLServer precedentemente progettato è il linguaggio Java. Più nello specifico

verranno utilizzati come strumenti di supporto XmlBeans, una libreria scritta dalla Apache

che permette di manipolare il contenuto di un file XML, e MyBatis, un framework per la

persistenza che offre supporto per scrivere delle query, delle stored procedures o mapping

avanzati attraverso l’uso di SQL e semplici regole di XML.

7.1 XmlBeans XMLBeans è una libreria scritta dalla Apache che permette di manipolare il contenuto di un

file XML fornendo una visione a oggetti dei dati e implementando tutte le funzionalità

necessarie allo sviluppatore per gestire in modo automatico le operazioni di lettura,

scrittura e validazione di un file XML. Mediante XMLBeans è possibile generare delle classi

java che permettono di leggere, scrivere o validare un file xml. Per generare le classi

occorre preparare un file xsd (in questo caso già fornito dalla UE) nel quale sono definite

tutte le regole a cui i file XML devono essere conformi.

Per generare le classi java che permettono di gestire i file XML conformi alla seguente

struttura si apre il prompt dei comandi, ci si porta nella directory nella quale è contenuto il

file xsd da leggere e viene lanciato il seguente comando:

D:\>scomp -out pratr2p0.jar PollutantReleaseAndTransferReport_2p0.xsd

Con questo comando viene creata la libreria (pratr2p0.jar) che contiene le classi java che

permettono di scrivere e leggere i file XML compatibili con l’xsd.

7.2 Creazione Oggetti-Tabelle Java Per poter popolare il database progettato si è rivelato necessario creare per ogni tabella il

relativo oggetto Java di riferimento (il cui nome corrisponde al nome della tabella) al cui

interno sono presenti le variabili rappresentanti gli attributi di ogni singola tabella.

Infine, per ogni variabile descrivente l’attributo, sono stati associati i metodi “get” e “set”.

(Note: I metodi get e set sono stati rimossi per rendere più leggibile il documento )

Page 34: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

29

7.2.1 PollutantReleaseAndTransferReport public class TblPollutantReleaseAndTransferReport {

private Integer iDPollutantReleaseAndTransferReport;

private Integer reportingYear;

private String countryID; private String coordinateSystemId;

private String remarkText;

}

7.2.2 Activity public class TblActivity { private Integer iDActivity;

private String nationalID;

private BigInteger rankingNumeric;

private String innexActivityCode;

private Integer facilityReportID;

}

7.2.3 CompetentAuthorityParty public class TblCompetentAuthorityParty {

private Integer iDCompetentAuthorityParty;

private String name;

private String contactPersonName;

private String cityName; private String streetName;

private String buildingNumber;

private String postcodeCode;

private String telephoneCommunication;

private String faxCommunication;

private String emailCommunication; private Integer pollutantReleaseAndTransferReport;

}

7.2.4 PollutantRelease public class TblPollutantRelease {

private Integer iDPollutantRelease;

private String mediumCode;

private String pollutantCode; private String methodBasisCode;

private String totalQuantity;

private String accidentalQuantity;

private Boolean confidentialIndicator;

private String confidentialCode; private String remarkText;

private Integer facilityReportID;

}

Page 35: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

30

7.2.5 PollutantReleaseMethodUsed public class TblPollutantReleaseMethodUsed {

private Integer pollutantReleaseID;

private String methodTypeCode;

private String designation; }

7.2.6 PollutantTransfer public class TblPollutantTransfer {

private Integer iDPollutantTransfer;

private String pollutantCode;

private String methodBasisCode;

private String quantity; private Boolean confidentialIndicator;

private String confidentialCode;

private String remarkText;

private Integer facilityReportID;

}

7.2.7 PollutantTransferMethodUsed public class TblPollutantTransferMethodUsed { private Integer pollutantTransferID;

private String methodTypeCode;

private String designation;

}

7.2.8 TblWasteTransfer public class TblWasteTransfer { private Integer iDWasteTransfer;

private String wasteTypeCode;

private String wasteTreatmentCode;

private String methodBasisCode;

private String quantity;

private Boolean confidentialIndicator; private String confidentialCode;

private String remarkText;

private Integer facilityReportID;

}

7.2.9 TblWasteTransfer public class TblWasteTransferMethodUsed { private Integer wasteTransferID;

private String methodTypeCode;

private String designation;

}

Page 36: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

31

7.2.10 WasteHandlerParty public class TblWasteHandlerParty {

private Integer iDWasteHandlerParty;

private String name;

private String cityName; private String streetName;

private String buildingNumber;

private String postcodeCode;

private String countryID;

private String siteCityName;

private String siteStreetName; private String siteBuildingNumber;

private String sitePostcodeCode;

private String siteCountryID;

private Integer wasteTransferID;

}

7.2.11 WasteHandlerParty public class TblFacilityReport {

private Integer iDFacilityReport;

private String nationalId;

private String previousNationalId; private Integer previousNationalIdReportingYear;

private String parentCompanyName;

private String facilityName;

private String cityName;

private String streetName;

private String buildingNumber; private String postcodeCode;

private Float longitudeMeasure;

private Float latitudeMeasure;

private String riverBasinDistrictID;

private String nACEMainEconomicActivityCode; private String mainEconomicActivityName;

private String competentAuthorityPartyName;

private BigInteger totalPPCInstallationQuantity;

private BigInteger operationHours;

private BigInteger totalEmployeeQuantity;

private String nutsRegionID; private String websiteCommunication;

private String publicInformation;

private Boolean confidentialIndicator;

private String confidentialCode;

private Boolean protectVoluntaryData; private String remarkText;

private String pollutantReleaseAndTransferReportID;

}

7.2.12 ProductionVolume public class TblProductionVolume { private Integer iDProductionVolume;

private String nationalID;

private String productName;

private String quantity;

private String UnitCode;

}

Page 37: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

32

7.3 Validazione File Xml Per verificare se la struttura e i dati del documento xml sono coerenti con quanto

specificato nello schema di definizione, l'interfaccia creata contenente i metodi per

accedere alla lettura del file XML, PollutantReleaseAndTransferReportDocument, mette a

disposizione il metodo validate. public void validateXML(PollutantReleaseAndTransferReportDocument pratrd) throws XmlException {

boolean isValid;

Collection errors = new ArrayList();

XmlOptions options = new XmlOptions();

xo.setErrorListener(errors);

isValid = pratrd.validate(options); if (!isValid) {

XmlException e = new XmlException("Validation errors", null, errors);

throw e;

}

}

Per tenere traccia degli eventuali errori riscontrati in fase di validazione, si può attivare

l'opzione setErrorListener, la quale si occupa di aggiungere ad una collezione di errori un

oggetto di tipo XmlError per ogni mancata conformità del file xml rispetto a quanto

definito nello schema. All'interno dell'oggetto di tipo XmlError si può risalire facilmente ad

informazioni importanti per identificare l'errore quali:

• la linea del file in cui è presente l'errore

• il messaggio di errore

• l'elemento o l'attributo alla base dell'errore

Nel seguente metodo si può vedere come stampare informazioni relative agli errori nel

momento in cui si riceve un'eccezione di tipo XmlException durante la validazione. public static void printErrors(XmlException e){

Iterator errorsIterator = e.getErrors().iterator();

while(errorsIterator.hasNext()){

XmlError error = (XmlError) errorsIterator.next();

System.err.println("Line "+ error.getLine()+": "+error.getMessage()); }

}

Da notare che il numero di linea in cui si è verificato l'errore è disponibile solo nel caso in

cui in fase di lettura del file contenente l'errore è stata attivata l'opzione

setLoadLineNumbers.

Page 38: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

33

7.4 Mybatis

7.4.1 Connessione al Server SQL MyBatis è un framework per la persistenza che offre supporto per scrivere delle query,

delle stored procedures o mapping avanzati attraverso l’uso di SQL e semplici regole di

XML o attraverso l’uso delle Annotations. La principale caratteristica è che grazie a MyBatis

viene eliminata la necessità di scrivere codice JDBC, di settare manualmente i parametri di

connessione al DB e inoltre anche il retrieve dei risultati risulta essere automatico. Ogni

applicazione di MyBatis gira intorno all’istanza di SqlSessionFactory. Un’istanza di questo

oggetto può essere ottenuta grazie alla classe SqlSessionFactoryBuilder, che prende in

pasto un file XML (o un’istanza della classe Configuration).

Il codice per ottenere un SqlSessionFactory attraverso un file XML è molto semplice: basta

infatti definire la risorsa che contiene il path del file, come una stringa. Opzionalmente è

possibile specificare l’environment che vorremmo che sia utilizzato.

Nel caso specifico abbiamo:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases>

<package name="com.sefiant.units.projectx.bean"/> </typeAliases> <environments default="sviluppo"> <environment id="sviluppo"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property value="com.microsoft.sqlserver.jdbc.SQLServerDriver"name="driver"/>

<property value="jdbc:sqlserver://localhost:1433;integratedSecurity=true;databaseName=E-PRTR;"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/sefiant/units/projectx/prs/dao/Activity.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/CompetentAuthorityParty.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/FacilityReport.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/PollutantRelease.xml" />

<mapper resource="com/sefiant/units/projectx/prs/dao/PollutantReleaseMethodUsed.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/PollutantTransfer.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/PollutantTransferMethodUsed.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/WasteTransfer.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/WasteTransferMethodUsed.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/WasteHandlerParty.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/ProductionVolume.xml" /> <mapper resource="com/sefiant/units/projectx/prs/dao/PollutantReleaseAndTransferReport.xml" /> </mappers> </configuration>

Page 39: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

34

Una volta ottenuta la SqlSessionFactory, per ottenere una SqlSession basta invocare il

metodo openSession().

SqlSession session = SqlSessionFactory.openSession(); //Per Aprire La Sessione

session.commit(); //Per Effettuare un Commit

session.close(); //Per Chiudere la Sessione

Una volta ottenuta la SqlSession e finita la fase di setup e sarà possibile utilizzare MyBatis

per interrogare e/o modificare il DB.

7.4.2 Mapping del DB Vengono realizzati i mapper che ci permetteranno di inserire le informazioni nelle tabelle

del DB. Per prima cosa realizziamo i file [NomeTabella]DAO.java per ogni tabella i quali

rappresentano le interfacce contenenti i metodi che andremo a invocare. In seguito sono

stati creati i relativi file XML [NomeTabella].xml i quali contengono le query che verranno

eseguite sul database. Le query utilizzate per questo progetto sono essenzialmente due:

1. Una INSERT che preleva i dati dagli oggetti java (riempiti tramite lettura del file

XML) e li inserisce all’interno delle tabelle del DB.

2. Una SELECT che salva la chiave primaria subito dopo il comando INSERT e la

inserisce nel relativo oggetto java. Questa operazione è necessaria quando il

contenuto della chiave primaria appena inserita viene usato per essere

successivamente inserito come chiave esterna in un'altra tabella.

Page 40: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

35

7.5 Interfaccia Grafica

7.5.1 Descrizione Finita la progettazione riguardante la connessione al server, la lettura del file XML e

l’inserimento dei dati nel DB, ci si è occupati di creare un interfaccia grafica per

l’applicativo. L’obbiettivo dell’interfaccia grafica è principalmente quello di aumentare

l’usabilità del sistema e di creare un interfaccia User-Friendly che permetta la selezione del

file XML da inserire posto all’interno del file system.

Figura 8: GUI XML Importer

L’interfaccia prevede, oltre a quelli classici windows, due bottoni: il primo apre la

visualizzazione del file system per permettere all’utente di cercare il file XML da inserire, il

secondo avvia l’import dei dati all’interno del database. Fin quando non è stato selezionato

un file Xml ovviamente non è possibile cliccare il bottone “Import”. Una volta cliccato

“Select xml..” si ottiene la seguente interfaccia per la selezione del file all’interno del file

system.

Figura 9: Interfaccia di selezione file

Page 41: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

36

Selezionato il file il programma conferma a console il nome del file selezionato e il bottone

“Import” diventa cliccabile.

Figura 10: Interfaccia Precaricamento file

Cliccando su “Import” si avvia la procedura di caricamento dei dati presenti nell’XML e il

programma informa l’utente dell’avvenuto caricamento o del fallimento (in caso di errori di

forma nel file XML) della procedura.

Figura 11: Interfaccia Completamento Operazione

7.5.2 Codice package com.sefiant.units.projectx.swing;

import java.awt.BorderLayout; import java.awt.Cursor;

import java.awt.Dimension;

import java.awt.Insets;

import java.awt.Toolkit;

import java.awt.event.ActionEvent; import java.awt.event.ActionListener;

import java.io.File;

import javax.swing.*;

import com.sefiant.units.projectx.XmlEngine;

public class XmlImporterSwing extends JPanel {

private static final long serialVersionUID = 4026831139065829791L;

private static final String newline = "\n";

private JButton openButton, saveButton; private JTextArea log;

private JFileChooser fc;

private File fileXml;

Page 42: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

37

public XmlImporterSwing() {

super(new BorderLayout());

//Create the log first, because the action listeners

//need to refer to it. log = new JTextArea(5,20);

log.setMargin(new Insets(5,5,5,5));

log.setEditable(false);

JScrollPane logScrollPane = new JScrollPane(log);

//Create a file chooser

fc = new JFileChooser();

//Add a custom file filter and disable the default

//(Accept All) file filter. fc.addChoosableFileFilter(new XmlFilter());

fc.setAcceptAllFileFilterUsed(false);

//Create the open button. We use the image from the JLF

//Graphics Repository (but we extracted it from the jar).

openButton = new JButton("Select xml...", createImageIcon("images/Open16.gif")); openButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

//Handle open button action.

int returnVal = fc.showOpenDialog(XmlImporterSwing.this);

if (returnVal == JFileChooser.APPROVE_OPTION) { fileXml = fc.getSelectedFile();

//This is where a real application would open the file.

log.append("File selezionato: " + fileXml.getName() + "." + newline);

saveButton.setEnabled(true);

} else {

log.append("Comando cancellato dall'utente." + newline); }

log.setCaretPosition(log.getDocument().getLength());

}

});

//Create the save button. We use the image from the JLF

//Graphics Repository (but we extracted it from the jar).

saveButton = new JButton("Import", createImageIcon("images/Save16.gif"));

saveButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

//Handle save button action. Thread worker = new Thread() {

public void run() {

openButton.setEnabled(false);

saveButton.setEnabled(false);

log.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); log.append("Importazione file in corso..." + newline);

try {

//Do the XML import

XmlEngine xe = new XmlEngine();

xe.processaFile(fileXml.getAbsolutePath());

log.append("File " + fileXml.getName() + " importato." + newline); } catch (Exception e){

e.printStackTrace();

log.append("Errore durante l'importazione del file " +

fileXml.getName() + ": " + e.getMessage() + newline);

} log.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));

openButton.setEnabled(true);

saveButton.setEnabled(true);

}

};

worker.start(); log.setCaretPosition(log.getDocument().getLength());

Page 43: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

38

}

}

saveButton.setEnabled(false);

//For layout purposes, put the buttons in a separate panel

JPanel buttonPanel = new JPanel(); //use FlowLayout buttonPanel.add(openButton);

buttonPanel.add(saveButton);

//Add the buttons and the log to this panel.

add(buttonPanel, BorderLayout.PAGE_START); add(logScrollPane, BorderLayout.CENTER);

}

/** Returns an ImageIcon, or null if the path was invalid. */

protected static ImageIcon createImageIcon(String path) { java.net.URL imgURL = XmlImporterSwing.class.getResource(path);

if (imgURL != null) {

return new ImageIcon(imgURL);

} else {

System.err.println("Couldn't find file: " + path);

return null; }

}

/**

* Create the GUI and show it */

private static void createAndShowGUI() {

//Create and set up the window.

JFrame frame = new JFrame("Xml importer");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Add content to the window.

frame.add(new XmlImporterSwing());

frame.setResizable(false);

Toolkit tk = Toolkit.getDefaultToolkit(); Dimension screenSize = tk.getScreenSize();

int screenHeight = screenSize.height;

int screenWidth = screenSize.width;

frame.setLocation(screenWidth / 3, screenHeight / 3);

//Display the window. frame.pack();

frame.setVisible(true);

}

public static void main(String[] args) { //Schedule a job for the event dispatch thread:

//creating and showing this application's GUI.

SwingUtilities.invokeLater(new Runnable() {

public void run() {

//Turn off metal's use of bold fonts

UIManager.put("swing.boldMetal", Boolean.FALSE); createAndShowGUI();

}

}

}

}

Page 44: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

39

8.Conclusioni Lo sviluppo del sistema informativo commissionato è risultato di grosso interesse anche a

livello formativo. L’utilizzo di un software proprietario come SQL Server mi ha dato la

possibilità di studiare e analizzare oltre che un nuovo tool, un nuovo linguaggio di

interrogazione di database collegato con l’universalità del linguaggio XML.

L’apprendimento è stato lento inizialmente, ma i problemi richiesti sono stati affrontati e

risolti senza troppe difficoltà.

L’impiego ha occupato una trentina di ore per l’apprendimento di caratteristiche avanzate,

mentre circa 200 ore sono state dedicate all’analisi dello schema XML e della relativa

scrittura del codice Java.

Mi ritengo piuttosto soddisfatto della possibilità fornitami, poiché l’apprendimento di un

tool a me sconosciuto all’inizio del progetto, e la possibilità di apprendere quali siano i

sistemi di gestione di unità inquinanti all’interno dell’Unione Europea, mi hanno permesso

di migliorare le mie conoscenze ed arricchire il mio curriculum.

Possibili sviluppi futuri sono:

• Presentazione dell’applicativo al committente (il progetto realizzato è infatti al

momento da considerarsi un prototipo).

• Fase di Test.

• Creazione di query e viste per migliorare l’usabilità del database.

• Creazione di una funzione che controlli il caricamento di un file XML già

precedentemente caricato.

• Creazione di una funzione che verifichi l’inserimento di un file XML già

precedentemente caricato e ne rilevi eventuali modifiche e/o errori.

• Trovare una procedura che modifichi il caricamento del file ad ogni aggiornamento

dello schema XML fornito dall’Unione Europea.

• Creazione di documentazione necessaria relativa al database.

Page 45: Progettazione ed implementazione di una base di dati per la gestione di emissioni inquinanti alimentata da file xml

40

Bibliografia Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone – Basi di dati - Modelli e linguaggi di interrogazione Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone – Basi di dati - Architetture e linee di evoluzione Cay Horstmann – Concetti di informatica e fondamenti di Java Documentazione JAVA

• http://docs.oracle.com/javase/6/docs/api/

mybatis: • https://code.google.com/p/mybatis/

Xmlbeans: • http://xmlbeans.apache.org/

Risorse online per gli sviluppatori di SQL Server: • http://msdn.microsoft.com/it-it/sqlserver/aa336270.aspx

Indice delle figure Figura 1: Sony Vaio VPCEB1S1E ...................................................................................................... 3

Figura 2: Attivazione Protocollo TCP/IP SQL Server 2008/1 ....................................................... 5

Figura 3: Attivazione Protocollo TCP/IP SQL Server 2008/2 ....................................................... 6

Figura 4: Attivazione Protocollo TCP/IP SQL Server 2008/3 ....................................................... 6

Figura 5: Installazione Driver JDBC – XMLBeans - MyBatis ........................................................ 8

Figura 6: Schema Entity-Relationship ............................................................................................. 9

Figura 7: Schema Finale Database ............................................................................................... 27

Figura 8: GUI XML Importer .......................................................................................................... 35

Figura 9: Interfaccia di selezione file ............................................................................................ 35

Figura 10: Interfaccia Precaricamento file ................................................................................... 36

Figura 11: Interfaccia Completamento Operazione .................................................................... 36