UNIVERSITÀ DEGLI STUDI DI TRIESTE                 FACOLTÀ DI INGEGNERIA      DIPARTIMENTO DI INGEGNERIA ED ARCHITETTURA   ...
A Tina e Angelo              I
Indice1.Introduzione ........................................................................................................
6.3.8 PollutantTransfer ......................................................................................... 18     6...
7.2.12 ProductionVolume...................................................................................... 31   7.3 Val...
1.IntroduzioneLa tesi proposta all’interno di questo documento andrà a trattare e sviluppare l’analisi e lagestione di un ...
2.Presentazione delle RichiesteIl commissionario del progetto non ha presentato particolari richieste se non quelle di uns...
4.Strumenti necessari allo sviluppo del ProgettoIl progetto necessita dell’utilizzo del seguente elenco di hardware e soft...
4.2.2 Microsoft Access 2010Software appartenente alla suite MICROSOFT OFFICE 2010, sarà utile per la gestione deidati cont...
5. Prima di Cominciare5.1 Attivazione Protocollo TCP/IP SQL Server 2008Attivando questo protocollo si ottiene il supporto ...
Se appare Disattivato, fare clic con il pulsante destro del mouse su TCP/IP, quindi   scegliere Attiva.                 Fi...
5.2 Librerie Eclipse5.2.1 Driver JDBCJDBC è uninterfaccia di programmazione che lavora da tramite tra codice Java e databa...
5.2.4 Installazione LibreriePer installare il queste librerie all’interno del progetto java si è seguito il seguenteproced...
6. Studio del file XSDUna "XML Schema Definition" (XSD) è un esempio (instance) di schema XML scritto inlinguaggio XML Sch...
6.1 Analisi EntitàSi passa a questo punto ad analizzare in maniera esplicita e descrittiva le singole entità:          •  ...
6.2.5 Associato A Report-PeriodoDescrive la relazione che intercorre tra un report e il suo periodo di rilevazione. Relazi...
6.3.2 CompetentAuthorityPartyDescribes details about the competent authority in charge to respond to requests from thepubl...
6.3.4 PreviousNationalIDThe previously reported national identification of a facility.Attributo               Descrizione ...
Attributo                       Descrizione                       Tipo di Dato                 NullAddress                ...
Attributo               Descrizione                        Tipo di Dato               NullOperationHours          The numb...
Attributo                     Descrizione                        Tipo di Dato             NullRemarkText                  ...
6.3.7 PollutantReleaseDescribes releases of pollutant to air/water/landAttributo               Descrizione                ...
6.3.8 PollutantTransferDescribes off-site transfer of pollutant in waste-wasterAttributo               Descrizione        ...
6.3.9 WasteTransferDescribes off-site transfer of waste (except in waste-waster)Attributo               Descrizione       ...
6.3.10 MethodUsedDescribes a measurement/calculation method used for determination of quantities ofpollutants and waste.At...
6.3.12 AddressThe base format for addresses in PRTR.Attributo             Descrizione                                     ...
6.3.14 FacilityAddressThe format for addresses for facilities. The country is assumed to correspond to thecountry reportin...
6.3.17 WebsiteCommunicationAn address for the exchange of information from and to a website over the Internet.Attributo   ...
6.3.21 PollutantMassQuantityPollutant mass quantity. Must be reported in kilograms with three significant digits.Attributo...
6.4 ConsiderazioniA questo punto dell’analisi è necessario inserire alcune considerazioni fatte prima dipassare alla creaz...
6.5 Accorpamento Tabelle – DenormalizzazioneA questo punto si decide di accorpare alcune tabelle all’interno di tabelle pi...
6.7 Schema Finale                    Figura 7: Schema Finale Database                                                     ...
7. Creazione Applicativo per Caricare File XMLIl Linguaggio scelto per creare l’applicativo che leggerà il file XML e che ...
7.2.1 PollutantReleaseAndTransferReportpublic class TblPollutantReleaseAndTransferReport {       private Integer iDPolluta...
7.2.5 PollutantReleaseMethodUsedpublic class TblPollutantReleaseMethodUsed {       private Integer pollutantReleaseID;    ...
7.2.10 WasteHandlerPartypublic class TblWasteHandlerParty {       private Integer iDWasteHandlerParty;       private Strin...
7.3 Validazione File XmlPer verificare se la struttura e i dati del documento xml sono coerenti con quantospecificato nell...
7.4 Mybatis7.4.1 Connessione al Server SQLMyBatis è un framework per la persistenza che offre supporto per scrivere delle ...
Una volta ottenuta la SqlSessionFactory, per ottenere una SqlSession basta invocare ilmetodo openSession().      SqlSessio...
7.5 Interfaccia Grafica7.5.1 DescrizioneFinita la progettazione riguardante la connessione al server, la lettura del file ...
Selezionato il file il programma conferma a console il nome del file selezionato e il bottone“Import” diventa cliccabile. ...
public XmlImporterSwing() {       super(new BorderLayout());        //Create the log first, because the action listeners  ...
}        }        saveButton.setEnabled(false);        //For layout purposes, put the buttons in a separate panel        J...
8.ConclusioniLo sviluppo del sistema informativo commissionato è risultato di grosso interesse anche alivello formativo. L...
BibliografiaPaolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone – Basi di dati - Modelli elinguaggi di interr...
Upcoming SlideShare
Loading in...5
×

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

265

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
265
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. UNIVERSITÀ DEGLI STUDI DI TRIESTE FACOLTÀ DI INGEGNERIA DIPARTIMENTO DI INGEGNERIA ED ARCHITETTURA Tesi di laurea in BASI DI DATIPROGETTAZIONE ED IMPLEMENTAZIONE DI UNABASE 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
  2. 2. A Tina e Angelo I
  3. 3. Indice1.Introduzione ............................................................................................................. 12.Presentazione delle Richieste ..................................................................................... 23.Analisi delle richieste ................................................................................................. 24.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 ............................................................................................... 45. 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 ..................................................................................... 86. 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 II
  4. 4. 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................................................................................................... 277. 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 III
  5. 5. 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 ........................................................................................................ 368.Conclusioni ............................................................................................................. 39Bibliografia................................................................................................................. 40Indice delle figure ...................................................................................................... 40 IV
  6. 6. 1.IntroduzioneLa tesi proposta all’interno di questo documento andrà a trattare e sviluppare l’analisi e lagestione di un sistema informativo, nella fattispecie di un database volto a raccogliere datistorici riguardanti dati di inquinamento all’interno dell’unione europea e forniti da altrisistemi informativi.Tale sistema verrà sviluppato in ambiente proprietario SQL SERVER 2008 in modo damantenere la stessa struttura e logistica del complesso sistema informativo preesistente sucui 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 dacreare. Il passo successivo consiste nel progettare il nuovo sistema secondo le leggi datedalla normativa UE e le specifiche date dall’analisi precedentemente effettuata.Lo sviluppo verrà realizzato interamente in locale per poi eventualmente porsi l’obbiettivodi 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. 1
  7. 7. 2.Presentazione delle RichiesteIl commissionario del progetto non ha presentato particolari richieste se non quelle di unsistema informativo funzionante e dalla struttura similare ai server forniti nei vari statid’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 delsistema informativo.3.Analisi delle richiesteIl progetto, per la sua realizzazione, richiede uno studio approfondito di strutture datiutilizzabili principalmente su motore SQL Server o Access.Non meno importante sarà lo studio approfondito della struttura del server in quanto unerrata progettazione potrebbe portare a problemi di incompatibilità non verificabileimmediatamente nella fase di test del sistema.Ancor più interessante sarà riempire il database opportunamente progettato con unastruttura dati fornita da altri database esterni. 2
  8. 8. 4.Strumenti necessari allo sviluppo del ProgettoIl progetto necessita dell’utilizzo del seguente elenco di hardware e software.Di seguito ne descriveremo le caratteristiche.4.1 Hardware4.1.1. PC Notebook SONY VAIO VPCEB1S1EÈ il portatile a disposizione del laureando, montante un processore INTEL CORE I5DUALCORE e scheda grafica ATI MOBILITY RADEON HD 5650 con 1 GB di memoriagrafica dedicata, HARD DISK da 500 GB e 4 GB di RAM DDR III. Figura 1: Sony Vaio VPCEB1S1E4.2 Software4.2.1 SQL Server 2008È il DBMS che verrà utilizzato per l’intero sviluppo del progetto. 3
  9. 9. 4.2.2 Microsoft Access 2010Software appartenente alla suite MICROSOFT OFFICE 2010, sarà utile per la gestione deidati contenuti nel database a disposizione per l’end-user.4.2.3 EclipseEclipse è un ambiente di sviluppo integrato multi-linguaggio e multipiattaforma. Nellospecifico verrà utilizzato per la produzione di software applicativo in linguaggio Java. Laversione utilizzata è la Juno (4.2), rilasciata il 27 giugno 2012.4.2.4 Software JavaJava è un linguaggio di programmazione e una piattaforma di elaborazione sviluppati daSun Microsystems nel 1995. Dal download del software Java si ottiene Java RuntimeEnvironment (JRE). JRE è composto dalla Macchina virtuale Java (JVM), dalle classi coredella piattaforma Java e dalle librerie Java di supporto. 4
  10. 10. 5. Prima di Cominciare5.1 Attivazione Protocollo TCP/IP SQL Server 2008Attivando questo protocollo si ottiene il supporto al DB per le connessioni remote, la cuiprocedura è descritta qui sotto (valida anche per SQL Server 2005): 1. Accedere al server a livello dati sul quale è definita listanza 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 linstallazione è stata specificata listanza predefinita, il nome dellistanza sarà MSSQLSERVER. 6. Nel riquadro dei risultati verificare che, nella colonna Stato, appaia Attivato accanto al nome del protocollo TCP/IP. 5
  11. 11. 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/27. 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 6
  12. 12. 5.2 Librerie Eclipse5.2.1 Driver JDBCJDBC è uninterfaccia di programmazione che lavora da tramite tra codice Java e database.Più in particolare, JDBC racchiude una serie di classi che permettono laccesso ad una basedi dati mediante metodi e schemi di funzionamento che sono intuitivi e perfettamente inlinea 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 JDBCappositamente studiato. Esiste poi un particolare driver, chiamato ponte JDBC-ODBC, chepermette lutilizzo di qualsiasi fonte di dati per la quale è disponibile un driver ODBC. OgniDBMS dotato di uninterfaccia ODBC, ad esempio Microsoft Access, può così essereimmediatamente sfruttato da Java e JSP, senza la necessità di un driver appositamentestudiato 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 XMLBeansXMLBeans è una libreria scritta dalla Apache che permette di manipolare il contenuto di unfile 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 classijava che permettono di leggere, scrivere o validare un file xml.5.2.3 MyBatisMyBatis è 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 diXML o attraverso l’uso delle Annotations. La principale caratteristica è che grazie a MyBatisviene eliminata la necessità di scrivere codice JDBC, di settare manualmente i parametri diconnessione al DB e inoltre anche il retrieve dei risultati risulta essere automatico. 7
  13. 13. 5.2.4 Installazione LibreriePer installare il queste librerie all’interno del progetto java si è seguito il seguenteprocedimento: 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 8
  14. 14. 6. Studio del file XSDUna "XML Schema Definition" (XSD) è un esempio (instance) di schema XML scritto inlinguaggio XML Schema. Una XSD definisce il tipo di un documento XML in termini divincoli: quali elementi ed attributi possono apparire, in quale relazione reciproca, qualetipo di dati può contenere, ed altro. Può essere usata anche con un programma divalidazione, 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 nelfatto che XSD è stato sviluppato con lintento che la determinazione della validità di undocumento 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 9
  15. 15. 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 RelazioniAnalogamente a quanto fatto con le entità, si analizzano ora le relazioni:6.2.1 Presenza Country-CompetentAuthorityPartyLa relazione descrive la presenza di una o più autorità di competenza nello stato diriferimento. A uno stato vengono associate più autorità le quali possono essere associatead uno ed un solo stato.6.2.2 Presenza Country-FacilityLa 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 vengonoassociate ad uno ed un solo stato.6.2.3 Rilevazioni Facility-ReportDescrive le rilevazioni dei report d’inquinamento fatta da un’unica impresa. Per ogniimpresa possono essere associati più report.6.2.4 Dettaglio Report-ChemicalLa relazione serve a descrivere più in dettaglio quelli che sono i report dell’azienda. 10
  16. 16. 6.2.5 Associato A Report-PeriodoDescrive la relazione che intercorre tra un report e il suo periodo di rilevazione. Relazionebanale ma da tenere particolarmente d’occhio in quanto il database da creare necessita diuna classificazione storica dei dati.6.3 Traduzione verso il modello RelazionaleIl passo successivo consiste nell analizzare singolarmente il file XSD fornito dall’UnioneEuropea per progettare in dettaglio le tabelle che costituiranno il sistema informativocercando di far riferimento, per quanto possibile, allo schema Entity-Relationship creato.6.3.1 PollutantReleaseAndTransferReportReporting of the E-PRTR dataAttributo Descrizione Tipo di Dato NullReportingYear The calendar year for which ReportingYearType data on releases of pollutants and off-site transfers is gathered.CountryID The Member State reporting. TextTypeCoordinateSystemID The coordinate system used in TextType reporting of coordinates of the facilities.RemarkText Textual remark from MS. Will LongTextType SI not be published on the web- site.CompetentAuthorityParty One or more competent CompetentAuthorityPartyType authorities in charge to respond to requests from the public.FacilityReport A facility report for each facility FacilityReportType reporting E-PRTR data. 11
  17. 17. 6.3.2 CompetentAuthorityPartyDescribes details about the competent authority in charge to respond to requests from thepublic.Attributo Descrizione Tipo di Dato NullName The name of the TextType competent authority.Address The address of the CompetentAuthorityAddressType competent authority.TelephoneCommunication The phone number TelecommunicationCommunicationTypeFaxCommunication The fax number. TelecommunicationCommunicationTypeEmailCommunication The e-mail address EmailCommunicationTypeContactPersonName Name of contact TextType SI person. If reported, data will be published.6.3.3 NationalIDThe national identification of a facility.Attributo Descrizione Tipo di Dato NullNationalID The national TextType Identification of a facility. 12
  18. 18. 6.3.4 PreviousNationalIDThe previously reported national identification of a facility.Attributo Descrizione Tipo di Dato NullNationalID The previously reported national NationalIDType identification. If the national identification has not changed or the facility has not previously been reported, this must correspond to the current national identification.ReportingYear The reporting year of which the previous ReportingYearType national identification was reported. If the facility has not previously been reported, this must correspond to the current reporting year.6.3.5 FacilityReportHolds the reporting for a given facilityAttributo Descrizione Tipo di Dato NullNationalID The national Identification of NationalIDType the facility.PreviousNationalID The previously reported PreviousNationalIDType national identification of the facilityParentCompanyName Name of the parent company, TextType SI i.e. the company that owns or controls the company operating the facility. Required unless confidentiality is claimed.FacilityName Name of the facility (operator TextType SI or owner). Required unless confidentiality is claimed. 13
  19. 19. Attributo Descrizione Tipo di Dato NullAddress The address of the facility. FacilityAddressType SI Required unless confidentiality is claimed.GeographicalCoordinate The coordinates of the GeographicalCoordinateType 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.RiverBasinDistrictID Identifies the river basin TextType district according to according to Article 3(1) of Directive 2000/60/EC (“Water Framework Directive”).NACEMainEconomicActivityCode Identifies the NACE code TextType according to the NACE 2 revision and thereby the main economic activity.MainEconomicActivityName The main economic activity TextType SI corresponding to the NACE code in plain text.CompetentAuthorityPartyName identifies the competent TextType authority in MS for public requests. Must correspond to the name of one of the CompetentAuthorityParty elements.ProductionVolume The total production volume ProductionVolumeType SI related to the main activity of the facility.TotalIPPCInstallationQuantity The total number of IPPC nonNegativeInteger SI installations covered by the facility. 14
  20. 20. Attributo Descrizione Tipo di Dato NullOperationHours The number of operating nonNegativeInteger SI hours in reporting year.TotalEmployeeQuantity The number of employees. nonNegativeInteger SINutsRegionID Identifies the region that the TextType SI facility belongs to as defined by NUTS.WebsiteCommunication The website address of the WebsiteCommunicationType SI facility. Will be published even if protection of voluntary data is claimed.PublicInformation Additional information to be LongTextType SI published on web site as-is (e.g. e-mail, contact person etc.). Will be published even if protection of voluntary data is claimed.ConfidentialIndicator Indicates if confidentiality for Boolean mandatory data is claimed or not. True marks confidentiality, false marks no confidentiality.ConfidentialCode Identifies the reason for TextType SI confidentiality according to Directive 2003/4/EC, Article 4(2). Required if confidentiality is claimed for mandatory data.ProtectVoluntaryData Indicates if voluntary data Boolean 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. 15
  21. 21. Attributo Descrizione Tipo di Dato NullRemarkText Textual remark, e.g. LongTextType SI 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.Activity The reported Annex I ActivityType activities of the facility.PollutantRelease The reported releases of PollutantReleaseType SI pollutants to air/water/land reported for the facility.PollutantTransfer The reported off-site transfer PollutantTransferType SI of pollutants in waste-water for the facility.WasteTransfer The reported off-site transfer WasteTransferType SI of pollutants in waste-water for the facility.6.3.6 ActivityA reported E-PRTR Annex I Activity for a facility.Attributo Descrizione Tipo di Dato NullRankingNumeric Consecutive ranking of the activities positiveInteger starting with 1. The activity with ranking = 1 shall be the main PRTR activity.AnnexIActivityCode Identifies the Annex I activity according TextType to Regulation 166/2006 Annex I. 16
  22. 22. 6.3.7 PollutantReleaseDescribes releases of pollutant to air/water/landAttributo Descrizione Tipo di Dato NullMediumCode Identifies the environmental medium (air, TextType water, land).PollutantCode The address of the competent authority. TextTypeMethodBasisCode Identifies the basis of the main method used TextType (M/C/E).MethodUsed Identifies the calculation and measurement MethodUsedType SI method(s) used for determination of the total quantity. Required if method basis is M or C and confidentiality is not claimed.TotalQuantity Total quantity including accidental quantity PollutantMassQuantityType [kg/year]. Values below threshold are considered voluntary and will not be published.AccidentalQuantity Accidental quantity [kg/year]. PollutantMassQuantityType SIConfidentialIndicator Indicates if confidentiality is claimed or not. Boolean True marks confidentiality, false marks no confidentiality.ConfidentialCode Identifies the reason for confidentiality TextType SI 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.RemarkText Textual remark, e.g. elaboration on the reason LongTextType SI for confidentiality. Will not be published. 17
  23. 23. 6.3.8 PollutantTransferDescribes off-site transfer of pollutant in waste-wasterAttributo Descrizione Tipo di Dato NullPollutantCode Identifies the pollutant. If confidentiality TextType is claimed the pollutant group must be reported instead of the individual pollutant.MethodBasisCode Identifies the basis of the main method TextType used (M/C/E).MethodUsed Identifies the calculation and MethodUsedType SI measurement method(s) used for determination of the quantity. Required if method basis is M or C and confidentiality is not claimed.Quantity Total quantity [kg/year]. Values below PollutantMassQuantityType threshold are considered voluntary and will not be published.ConfidentialIndicator Indicates if confidentiality is claimed or Boolean not. True marks confidentiality, false marks no confidentiality.ConfidentialCode Identifies the reason for confidentiality TextType SI according to Directive 2003/4/EC, Article 4(2). Required if confidentiality is claimed.RemarkText Textual remark, e.g. elaboration on the LongTextType SI reason for confidentiality. Will not be published. 18
  24. 24. 6.3.9 WasteTransferDescribes off-site transfer of waste (except in waste-waster)Attributo Descrizione Tipo di Dato NullWasteTypeCode Identifies the type of waste (non- TextType hazardous, hazardous within country and hazardous outside country).WasteTreatmentCode Identifies the waste treatment operation TextType SI (recovery or disposal). Required unless confidentiality is claimed.MethodBasisCode Identifies the basis of the main method TextType SI used (M/C/E).Quantity Quantity [t/year]. Required unless WasteMassQuantityType SI confidentiality is claimed.MethodUsed Identifies the calculation and MethodUsedType SI measurement method(s) used for determination of the quantity. Required if method basis is M or C and confidentiality is not claimed.ConfidentialIndicator Indicates if confidentiality is claimed or Boolean not. True marks confidentiality, false marks no confidentiality.ConfidentialCode Identifies the reason for confidentiality TextType SI according to Directive 2003/4/EC, Article 4(2). Required if confidentiality is claimed.RemarkText Textual remark, e.g. elaboration on the LongTextType SI reason for confidentiality. Will not be published.WasteHandlerParty Identifies the recoverer/disposer of the WasteHandlerPartyType SI waste. Required for transfer of hazardous waste outside the country unless confidentiality is claimed. 19
  25. 25. 6.3.10 MethodUsedDescribes a measurement/calculation method used for determination of quantities ofpollutants and waste.Attributo Descrizione Tipo di Dato NullMethodTypeCode Identifies the type of method used TextType (CEN/ISO, ETS, etc.). Notice that the method type “WEIGH” (i.e. weighing) only is allowed for waste transfer.Designation A short designation or description of the TextType SI method used. Required for some method types as indicated in the list of legal method type codes.6.3.11 WasteHandlerPartyRecoverer/Disposer of hazardous waste transferred outside the countryAttributo Descrizione Tipo di Dato NullName Name of recoverer/disposer. Required TextType SI unless confidentiality is claimed for the WasteTransfer element.Address The address of the recoverer/disposer. AddressType SI Required unless confidentiality is claimed for the WasteTransferSiteAddress The address of the actual AddressType SI recoverer/disposer site. Required unless confidentiality is claimed for the WasteTransfer element. 20
  26. 26. 6.3.12 AddressThe base format for addresses in PRTR.Attributo Descrizione Tipo di Dato NullStreetName The name, expressed as text, of a street in the TextType SI address.BuildingNumber The building number, expressed as text, in the TextType SI address.CityName The name, expressed as text, of the city, town or TextType SI village in the address.Attributo Descrizione Tipo di Dato NullPostcodeCode The postcode, expressed as text, if the address. ShortTextType SICountryID The unique identifier of a country in the structured TextType SI address (Reference ISO 3166 and UN/ECE Rec 3).6.3.13 CompetentAuthorityAddressThe address for a competent authority. The country is assumed to correspond to thecountry reporting.Attributo Descrizione Tipo di Dato NullStreetName The street name. TextTypeBuildingNumber The building number. If reported, data will be TextType SI published..CityName The Town/village. TextTypePostcodeCode The postal code. If reported, data will be published. ShortTextType SI 21
  27. 27. 6.3.14 FacilityAddressThe format for addresses for facilities. The country is assumed to correspond to thecountry reportingAttributo Descrizione Tipo di Dato NullStreetName The street name of the facility. Required unless TextType SI confidentiality is claimed.BuildingNumber The building number of the facility TextType SICityName The Town/village of the facility. Required unless TextType SI confidentiality is claimed.PostcodeCode The Postal code of the facility. Required unless ShortTextType SI confidentiality is claimed.6.3.15 TelecommunicationCommunicationInformation necessary to establish an electronic telecommunication connection for thepurpose of a telephone or facsimile exchange (Fax or Telephone).Attributo Descrizione Tipo di Dato NullCompleteNumberText The text string of characters that make up the ShortTextType complete number for this telecommunication.6.3.16 EmailCommunicationAn address for the delivery of electronic mail.Attributo Descrizione Tipo di Dato NullEmailURIID The Uniform Resource Identifier (URI) for this email TextType communication. Must contain an @ 22
  28. 28. 6.3.17 WebsiteCommunicationAn address for the exchange of information from and to a website over the Internet.Attributo Descrizione Tipo di Dato NullWebsiteURIID The Uniform Resource Identifier (URI) of this website TextType communication. Must start with “http://”.6.3.18 GeographicalCoordinateThe latitude and longitude of a place, by which its relative situation on the globe is known.Attributo Descrizione Tipo di Dato NullLongitudeMeasure minInclusive value=”-180” float maxInclusive value=”180”LatitudeMeasure minInclusive value=”-90” float maxInclusive value=”90”6.3.19 ProductionVolumeAttributo Descrizione Tipo di Dato NullProductName The product/product group TextTypeQuantity The total volume. The unit must be ProductionVolumeQuantityType given in attribute unitCode6.3.20 ProductionVolumeQuantityProduction volume quantity. Units must be given in unitCode attribute.Attributo Descrizione Tipo di Dato NullQuantityType The UN/ECE Recommendation 20 code identifying the ShortTextType unit for this quantity, such as “KGM” for kilograms.” 23
  29. 29. 6.3.21 PollutantMassQuantityPollutant mass quantity. Must be reported in kilograms with three significant digits.Attributo Descrizione Tipo di Dato NullQuantityType The UN/ECE Recommendation 20 code identifying the ShortTextType unit for this quantity, such as “KGM” for kilograms.”6.3.22 WasteMassQuantityA data type for quantities.Attributo Descrizione Tipo di Dato NullQuantityType The quantity of waste must be reported in tonnes ShortTextType6.3.23 QuantityA data type for quantities.Attributo Descrizione Tipo di Dato NullQuantityType The UN/ECE Recommendation 20 code identifying the ShortTextType unit for this quantity, such as “KGM” for kilograms.” 24
  30. 30. 6.4 ConsiderazioniA questo punto dell’analisi è necessario inserire alcune considerazioni fatte prima dipassare alla creazione effettiva delle tabelle e delle relazioni che intercorrono tra di esse.6.4.1 Valori NullL’introduzione dei valori Null è stata fatta per ogni attributo ogniqualvolta che, nelloschema XML, è stata incontrata la dicitura: “minOccurs=”0””. Tale dicitura indica infattiche l’elemento di riferimento può occorrere un numero pari a zero volte.6.4.2 Tipi di DatoDurante l’analisi sono stati riscontrati dei tipi di dato a cui daremo un corrispettivosignificato 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 zeroGli 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 echiavi esterne. 25
  31. 31. 6.5 Accorpamento Tabelle – DenormalizzazioneA questo punto si decide di accorpare alcune tabelle all’interno di tabelle più grandirinunciando così alla seconda forma normale per la quale si dovrebbero spezzare tabelleche descrivono entità separate. Nello specifico verranno considerati i seguentiaccorpamenti: • PollutantReleaseAndTransferReport • CompetentAuthorityParty (Address, TelephoneCommunication, FaxCommunication, EmailCommunication) • FacilityReport (NationalID, PreviousNationalID, GeographicalCoordinate, WebsiteCommunication) • ProductionVolume (NationalID) • Activity (NationalID) • PollutantRelease • PollutantTransfer • WasteTransfer • WasteHandlerParty • PollutantRelaseMethodUsed • PollutantTransferMethodUsed • WasteTransferMethodUsedSi riduce così il numero di tabelle da realizzare da 23 a 12.6.6 Scelta delle chiavi primarieAll’interno di ogni tabella vengono inserite come chiavi primarie degli ID cherappresentano univocamente gli elementi della tabella e che serviranno a stabilire relazionicon chiavi esterne appartenenti ad altre tabelle.Per convenzione gli ID di ogni tabella prenderanno il nome ID[NomeTabella]. Le chiaviesterne associate invece prenderanno il nome [NomeTabella]ID. Le chiavi primarie di ognitabella verranno generate automaticamente dal DBMS in modo tale che siano tuttedistinte. La generazione automatica degli ID viene imposto nelle proprietà del tipo di datosettando: Identity = Yes, IdentityIncrement = 1, Identity Seed = 1. 26
  32. 32. 6.7 Schema Finale Figura 7: Schema Finale Database 27
  33. 33. 7. Creazione Applicativo per Caricare File XMLIl Linguaggio scelto per creare l’applicativo che leggerà il file XML e che andrà a popolare ildatabase SQLServer precedentemente progettato è il linguaggio Java. Più nello specificoverranno utilizzati come strumenti di supporto XmlBeans, una libreria scritta dalla Apacheche permette di manipolare il contenuto di un file XML, e MyBatis, un framework per lapersistenza che offre supporto per scrivere delle query, delle stored procedures o mappingavanzati attraverso l’uso di SQL e semplici regole di XML.7.1 XmlBeansXMLBeans è una libreria scritta dalla Apache che permette di manipolare il contenuto di unfile 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 classijava che permettono di leggere, scrivere o validare un file xml. Per generare le classioccorre preparare un file xsd (in questo caso già fornito dalla UE) nel quale sono definitetutte le regole a cui i file XML devono essere conformi.Per generare le classi java che permettono di gestire i file XML conformi alla seguentestruttura si apre il prompt dei comandi, ci si porta nella directory nella quale è contenuto ilfile xsd da leggere e viene lanciato il seguente comando: D:>scomp -out pratr2p0.jar PollutantReleaseAndTransferReport_2p0.xsdCon questo comando viene creata la libreria (pratr2p0.jar) che contiene le classi java chepermettono di scrivere e leggere i file XML compatibili con l’xsd.7.2 Creazione Oggetti-Tabelle JavaPer poter popolare il database progettato si è rivelato necessario creare per ogni tabella ilrelativo oggetto Java di riferimento (il cui nome corrisponde al nome della tabella) al cuiinterno 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 ) 28
  34. 34. 7.2.1 PollutantReleaseAndTransferReportpublic class TblPollutantReleaseAndTransferReport { private Integer iDPollutantReleaseAndTransferReport; private Integer reportingYear; private String countryID; private String coordinateSystemId; private String remarkText;}7.2.2 Activitypublic class TblActivity { private Integer iDActivity; private String nationalID; private BigInteger rankingNumeric; private String innexActivityCode; private Integer facilityReportID;}7.2.3 CompetentAuthorityPartypublic 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 PollutantReleasepublic 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;} 29
  35. 35. 7.2.5 PollutantReleaseMethodUsedpublic class TblPollutantReleaseMethodUsed { private Integer pollutantReleaseID; private String methodTypeCode; private String designation;}7.2.6 PollutantTransferpublic 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 PollutantTransferMethodUsedpublic class TblPollutantTransferMethodUsed { private Integer pollutantTransferID; private String methodTypeCode; private String designation;}7.2.8 TblWasteTransferpublic 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 TblWasteTransferpublic class TblWasteTransferMethodUsed { private Integer wasteTransferID; private String methodTypeCode; private String designation;} 30
  36. 36. 7.2.10 WasteHandlerPartypublic 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 WasteHandlerPartypublic 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 ProductionVolumepublic class TblProductionVolume { private Integer iDProductionVolume; private String nationalID; private String productName; private String quantity; private String UnitCode;} 31
  37. 37. 7.3 Validazione File XmlPer verificare se la struttura e i dati del documento xml sono coerenti con quantospecificato nello schema di definizione, linterfaccia creata contenente i metodi peraccedere alla lettura del file XML, PollutantReleaseAndTransferReportDocument, mette adisposizione 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ò attivarelopzione setErrorListener, la quale si occupa di aggiungere ad una collezione di errori unoggetto di tipo XmlError per ogni mancata conformità del file xml rispetto a quantodefinito nello schema. Allinterno delloggetto di tipo XmlError si può risalire facilmente adinformazioni importanti per identificare lerrore quali: • la linea del file in cui è presente lerrore • il messaggio di errore • lelemento o lattributo alla base dellerroreNel seguente metodo si può vedere come stampare informazioni relative agli errori nelmomento in cui si riceve uneccezione 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 lerrore è disponibile solo nel caso incui in fase di lettura del file contenente lerrore è stata attivata lopzionesetLoadLineNumbers. 32
  38. 38. 7.4 Mybatis7.4.1 Connessione al Server SQLMyBatis è 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 diXML o attraverso l’uso delle Annotations. La principale caratteristica è che grazie a MyBatisviene eliminata la necessità di scrivere codice JDBC, di settare manualmente i parametri diconnessione al DB e inoltre anche il retrieve dei risultati risulta essere automatico. Ogniapplicazione di MyBatis gira intorno all’istanza di SqlSessionFactory. Un’istanza di questooggetto può essere ottenuta grazie alla classe SqlSessionFactoryBuilder, che prende inpasto un file XML (o un’istanza della classe Configuration).Il codice per ottenere un SqlSessionFactory attraverso un file XML è molto semplice: bastainfatti 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> 33
  39. 39. Una volta ottenuta la SqlSessionFactory, per ottenere una SqlSession basta invocare ilmetodo openSession(). SqlSession session = SqlSessionFactory.openSession(); //Per Aprire La Sessione session.commit(); //Per Effettuare un Commit session.close(); //Per Chiudere la SessioneUna volta ottenuta la SqlSession e finita la fase di setup e sarà possibile utilizzare MyBatisper interrogare e/o modificare il DB.7.4.2 Mapping del DBVengono realizzati i mapper che ci permetteranno di inserire le informazioni nelle tabelledel DB. Per prima cosa realizziamo i file [NomeTabella]DAO.java per ogni tabella i qualirappresentano le interfacce contenenti i metodi che andremo a invocare. In seguito sonostati creati i relativi file XML [NomeTabella].xml i quali contengono le query che verrannoeseguite 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 unaltra tabella. 34
  40. 40. 7.5 Interfaccia Grafica7.5.1 DescrizioneFinita la progettazione riguardante la connessione al server, la lettura del file XML el’inserimento dei dati nel DB, ci si è occupati di creare un interfaccia grafica perl’applicativo. L’obbiettivo dell’interfaccia grafica è principalmente quello di aumentarel’usabilità del sistema e di creare un interfaccia User-Friendly che permetta la selezione delfile XML da inserire posto all’interno del file system. Figura 8: GUI XML ImporterL’interfaccia prevede, oltre a quelli classici windows, due bottoni: il primo apre lavisualizzazione del file system per permettere all’utente di cercare il file XML da inserire, ilsecondo avvia l’import dei dati all’interno del database. Fin quando non è stato selezionatoun 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 filesystem. Figura 9: Interfaccia di selezione file 35
  41. 41. Selezionato il file il programma conferma a console il nome del file selezionato e il bottone“Import” diventa cliccabile. Figura 10: Interfaccia Precaricamento fileCliccando su “Import” si avvia la procedura di caricamento dei dati presenti nell’XML e ilprogramma informa l’utente dell’avvenuto caricamento o del fallimento (in caso di errori diforma nel file XML) della procedura. Figura 11: Interfaccia Completamento Operazione7.5.2 Codicepackage 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; 36
  42. 42. 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 dallutente." + 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 limportazione 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()); 37
  43. 43. } } 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("Couldnt 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 applications GUI. SwingUtilities.invokeLater(new Runnable() { public void run() { //Turn off metals use of bold fonts UIManager.put("swing.boldMetal", Boolean.FALSE); createAndShowGUI(); } } }} 38
  44. 44. 8.ConclusioniLo sviluppo del sistema informativo commissionato è risultato di grosso interesse anche alivello formativo. L’utilizzo di un software proprietario come SQL Server mi ha dato lapossibilità di studiare e analizzare oltre che un nuovo tool, un nuovo linguaggio diinterrogazione di database collegato con l’universalità del linguaggio XML.L’apprendimento è stato lento inizialmente, ma i problemi richiesti sono stati affrontati erisolti 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 relativascrittura del codice Java.Mi ritengo piuttosto soddisfatto della possibilità fornitami, poiché l’apprendimento di untool a me sconosciuto all’inizio del progetto, e la possibilità di apprendere quali siano isistemi di gestione di unità inquinanti all’interno dell’Unione Europea, mi hanno permessodi 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. 39
  45. 45. BibliografiaPaolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone – Basi di dati - Modelli elinguaggi di interrogazionePaolo Atzeni, Stefano Ceri, Stefano Paraboschi, Riccardo Torlone – Basi di dati -Architetture e linee di evoluzioneCay Horstmann – Concetti di informatica e fondamenti di JavaDocumentazione 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.aspxIndice delle figureFigura 1: Sony Vaio VPCEB1S1E ...................................................................................................... 3Figura 2: Attivazione Protocollo TCP/IP SQL Server 2008/1 ....................................................... 5Figura 3: Attivazione Protocollo TCP/IP SQL Server 2008/2 ....................................................... 6Figura 4: Attivazione Protocollo TCP/IP SQL Server 2008/3 ....................................................... 6Figura 5: Installazione Driver JDBC – XMLBeans - MyBatis ........................................................ 8Figura 6: Schema Entity-Relationship ............................................................................................. 9Figura 7: Schema Finale Database ............................................................................................... 27Figura 8: GUI XML Importer .......................................................................................................... 35Figura 9: Interfaccia di selezione file ............................................................................................ 35Figura 10: Interfaccia Precaricamento file ................................................................................... 36Figura 11: Interfaccia Completamento Operazione .................................................................... 36 40

×