Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoMacario Miceli Modificato 11 anni fa
1
<XML......MOMIS/> Serializzazione di oggetti in formato XML nellambito del sistema MOMIS Davide Lenzi Chiar.mo Prof. Sonia Bergamaschi Chiar.mo Prof. Michele Colajanni Tesi di: Relatore: Controrelatore: Modena, 22/03/2001 UNIVERSITÀ DI MODENA E REGGIO EMILIA Facoltà di Ingegneria – Sede di Modena Corso di Laurea in Ingegneria Informatica
2
<XML......MOMIS/> Obiettivi Garantire linteroperabilità con altri sistemi a mediatore mediante luso di una lingua franca. Serializzare in XML lo stato del sistema MOMIS. 0100%
3
<XML......MOMIS/> Esportazione di Schemi ODL I 3 in XML 1.0 Non mi dilungherò su cosa sia il progetto MOMIS e quali sono i suoi obiettivi: questi argomenti sono stati ampiamente trattati in lavori di tesi precedenti e verranno ripresi anche nella prossima presentazione. Parte II 0100%
4
<XML......MOMIS/> Il sistema MOMIS 0100%
5
<XML......MOMIS/> Caratteristiche del linguaggio ODL I 3 Descrive schemi di basi di dati in maniera indipendente dalla sorgente (relazionale, ad oggetti, semistrutturata) Estensione del linguaggio standard ODL di ODMG Linguaggio Object Oriented ricco di aspetti semantici. Definisce costrutti per la rappresentazione della conoscenza: vincoli di integrità, relazioni intensionali ed estensionali tra concetti. Definisce chiavi primarie, candidate e foreign key. supporta multiple definizioni per una stessa classe, utile per rappresentare sorgenti semistrutturate. 0100%
6
<XML......MOMIS/> MOMIS produce il Global Virtual Schema (GVS) Lo schema integrato è costruito partendo dalle varie sorgenti e viene espresso in ODL I 3. Il GVS contiene un insieme di classi globali costruite a partire dalle classi presenti negli schemi locali. per ogni classe globale viene definita una mapping table: una struttura tabellare che descrive come i vari attributi globali vengono costruiti a partire dagli attributi locali. 0100%
7
<XML......MOMIS/> MOMIS come sorgente integrata di dati XML Esportare uno schema ODL I 3 in XML 1.0 significa creare una DTD che descriva la struttura dello schema sorgente cercando di limitare perdite di conoscenza. La DTD prodotta potrà essere utilizzata: –per validare i dati ritornati. –come fonte di informazioni su un generico documento XML sul quale porre delle query utilizzando un linguaggio di interrogazione per XML: es. XML-QL 0100%
8
<XML......MOMIS/> ODLI3 vs DTD di XML 1.0 ODLI3 relazioni fondamentali: –Part-of –Kind-of –Is a vincoli di integrità, relazioni intensionali, relazioni estensionali, chiavi DTD: relazioni fondamentali: – Part-of – Kind-of solo in forma implicita Non ci sono altri strumenti! Parte della conoscenza viene necessariamente perduta. 0100%
9
<XML......MOMIS/> Problemi risolti per ottenere la traduzione. Omonimie: ODL I 3 consente la definizione di attributi omonimi, la DTD invece richiede lunivocità degli elementi dichiarati. (rinominazione e mapping) Ereditarietà ricondotta a sole relazioni part-of: Student discende da Person – traduzione della relazione is a. Traduzione delle chiavi: impossibile con i soli attributi ID o IDREF.
10
<XML......MOMIS/> Aspetti tradotti direttamente o comunque supportati dalla DTD: Struttura delle entità definite in ODL I 3 Mapping table Ereditarietà traduzione della relazione is a –algoritmo per lesplorazione ricorsiva della discendenza per costruire la lista di tutte le possibili alternative. Definizioni di interfacce in union. (operatore | ) Template types (uso delloperatore *) attributi opzionali (uso delloperatore ?) Relationship ODL 0100%
11
<XML......MOMIS/> Semantica solamente descritta: Viene prodotto un elemento XML che riporta meta informazioni –Chiavi primarie –Chiavi candidate –Foreign Key Altre informazioni: –Tipi ODL I 3 –Mapping tra nomi ODL I 3 e nomi usati nella DTD –Nomi delle relationship inverse 0100%
12
<XML......MOMIS/> Conoscenza perduta: relazioni intensionali ed estensionali vincoli di integrità 0100%
13
<XML......MOMIS/> Esempio: classe ODLI3 class course ( source relational university key (name) ) { attribute boolean difficult; attribute string name; } class spec_course : course ( ) { attribute set requires; } course spec_course 0100%
14
<XML......MOMIS/> Esempio: traduzione DTD <!ATTLIST course id_xml ID #REQUIRED...> <!ATTLIST odli3_reference reference IDREF#IMPLIED > class course ( source relational university key (name) ) { attribute boolean difficult; attribute string name; } class spec_course : course ( ) { attribute set requires; } 0100%
15
<XML......MOMIS/> Conclusioni Il traduttore ODLI3-DTD sono state scritte 3073 linee di codice commentato –Per tradurre gli aspetti semantici si sta studiando la possibilità di utilizzare RDF e RDF Schema –Per supportare la traduzione diretta dei tipi ODLI3 si pensa di scrivere un traduttore anche per XML schema. 0100%
16
<XML......MOMIS/> Serializzare lo stato di MOMIS in XML In realtà si è risolto un problema più generale: la serializzazione di qualunque grafo di oggetti Java in XML. Gli oggetti sono entità software caratterizzate da: –uno stato, formato da vari componenti (campi) –operazioni, unico strumento per modificare lo stato interno Serializzare significa ordinare, mettere in sequenza i vari componenti dello stato, al fine di ottenerne uno stream. 0100%
17
<XML......MOMIS/> Inquadrare il problema La serializzazione è utilizzata per –Light weight persitence –Remote methods invocation (RMI) Schema di riferimento:
18
<XML......MOMIS/> La destinazione… (object deserialization) Deve essere in grado di ricostruire unistanza equivalente a quella originale Ha a disposizione: –le informazioni presenti nello stream. –la conoscenza del protocollo utilizzato
19
<XML......MOMIS/> Tutto funziona bene se: Sorgente e destinazione fanno parte dello stesso applicativo o utilizzano moduli compatibili per i processi di I/O di oggetti. Ma in ambienti eterogenei? –Difficoltà di accesso allinformazione per i software che non conoscono il protocollo utilizzato
20
<XML......MOMIS/> Serializzazione binaria: Loggetto viene convertito in una uniforme sequenza di byte. Vantaggio: –Altissima efficienza: stream di dimensione ridotta alte prestazioni. Serializzare in binario significa scegliere alte prestazioni ostacolando però lutilizzo del proprio software, al di fuori degli scopi per cui era stato progettato.
21
<XML......MOMIS/> Serializzare in XML: facilita lo scambio di informazioni tra ambienti eterogenei e si permette limpiego del proprio software per scopi differenti da quelli per cui era stato progettato. –la deserializzazione è possibile solo se si conosce il protocollo utilizzato (significato dei nomi dei tag e degli attributi) ma... –le informazioni risultano comunque accessibili grazie allo standard XML. Problema: alto livello di ridondanza insito nella sintassi XML. –Sono stati studiati degli accorgimenti per ridurla 0100%
22
<XML......MOMIS/> Il package XmlTools: Serializzazione/deserializzazione di grafi di oggetti Java –luso del linguaggio Java è un vincolo di progetto. Trasparente allutilizzatore. –Oggetti visti come black box Flessibile e personalizzabile: il codice XML prodotto varia in base ai desideri dellutente. Basato sulle Java Object Serialization Specification per ottenere una forte integrazione con il meccanismo standard fornito dal linguaggio. Forte insensibilità allevoluzione delle classi (Class versioning). 0100%
23
<XML......MOMIS/> XmlTools: Architettura. 0100%
24
<XML......MOMIS/> Quali classi sono serializzabili? Da un punto di vista tecnico XmlTools è in grado di serializzare qualunque classe. Tuttavia per questioni di protezione e per uniformarsi al meccanismo standard di Java, vengono serializzate solo le classi che implementano linterfaccia Serializable o una delle sue estensioni. Serializable è uninterfaccia vuota! Serve solo a distinguere le classi che possono essere serializzate dalle altre. 0100%
25
<XML......MOMIS/> Il processo di serializzazione (grafi) Problema: –Non si serializzano singoli oggetti ma grafi di oggetti. –Lo stato di un oggetto può contenere riferimenti ad altri oggetti o riferimenti ricorsivi a se stesso. –Tutti gli oggetti accessibili a partire dalla radice del grafo vanno anchessi serializzati. 0100%
26
<XML......MOMIS/> Il processo di serializzazione (grafi) Soluzione –Ogni singolo oggetto viene serializzato ununica volta: nellelemento che contiene la definizione del suo stato viene scritto un attributo contenente un identificatore numerico: <object field=Name class=java.lang.String... –Ogni successivo riferimento allo stesso oggetto provoca la scrittura di un elemento XML vuoto con un riferimento alla definizione vera e propria. 0100%
27
<XML......MOMIS/> Il processo di serializzazione (algoritmo) Lalgoritmo di serializzazione funziona sommariamente nel modo seguente: sia obj loggetto da serializzare. –Se obj è già stato serializzato in precedenza, scrivi un riferimento allobject_ID reperito da una struttura interna. –Se loggetto è di una classe particolare (conosciuta da XmlWriter o un suo eventuale discendente) attiva le procedure specifiche per quella classe. –Cerca (a run-time) allinterno di obj eventuali metodi per la personalizzazione delloutput ed invocali.
28
<XML......MOMIS/> Il processo di serializzazione (algoritmo) –Per tutti i campi delloggetto di ogni sua superclasse: se il campo è un tipo primitivo scrivi una sua rappresentazione Es: se il campo è un oggetto invoca ricorsivamente il processo di serializzazione.
29
<XML......MOMIS/> Personalizzazione delloutput. Supporto di tutti gli strumenti standard di personalizzazione presenti nelle specifiche java: metodi writeObject/readObject, interfaccia Externalizable. Supporto di interfacce analoghe specifiche per XML. oppure tramite limpostazione di semplici proprietà booleane è possibile scegliere vari formati senza scrivere linee di codice. Esempi: – 0100%
30
<XML......MOMIS/> Personalizzazione delloutput Implementando uno dei metodi (facoltativi) writeObject nella classe da serializzare: private writeObject(XmlWriter wrt) throws XmlToolsException; private writeObject(ObjectOutputStream out) throws IOException; –il loro funzionamento è analogo a quello descritto nel meccanismo standard di serializzazione. Implementando apposite interfacce: Externalizable (java.io) o XmlExternalizable A run-time XmlWriter ricerca questi metodi allinterno delle classi da serializzare ed eventualmente li invoca.
31
<XML......MOMIS/> Serializzazione: Altre Caratteristiche riduzione della ridondanza: –Uso di valori di default: eliminazione dei valori null negli array –eliminazione dei tag che descrivono superclassi prive di campi serializzabili. Bilanciamento facoltativo della struttura XML per limitarne la profondità e favorire la ricerca di informazioni. Protezione delle informazioni sensibili: supporto alla parola riservata transient del linguaggio Java 0100%
32
<XML......MOMIS/> Il processo di ricostruzione (object deserialization) XmlReader implementa un algoritmo di ricostruzione delle istanze che può essere riassunto in due passi principali: –Allocare una nuova istanza appartenente alla classe specificata nel documento XML. –Ripristinare lo stato serializzato mantenendo se possibile la compatibilità con le versioni precedenti della stessa classe. La difficoltà maggiore nella realizzazione di XmlReader è stata la progettazione di un algoritmo che consentisse una comunicazione bidirezionale tra versioni differenti delle stesse classi. 0100%
33
<XML......MOMIS/> Allocare una nuova istanza Java mette a disposizione un metodo per istanziare una classe il cui nome è noto solo a run-time. Il problema è che questo metodo richiede la presenza nella classe di un costruttore senza argomenti. Se una classe non specifica il costruttore di default? –si può chiamare a run-time uno degli altri costruttori, ma con quali argomenti? –si limita la deserializzazione alle sole classi con il costruttore di default? La seconda soluzione è praticabile ma è molto limitante.
34
<XML......MOMIS/> Il costruttore fantasma. Come allocare unistanza di una classe senza chiamare alcun costruttore? Come riuscire a chiamare il costruttore di default della prima superclasse non serializzabile? (requisito delle specifiche Java) XmlReader implementa uno speciale costruttore in grado di allocare per classi qualunque. –Il costruttore alloca le istanze seguendo fedelmente le specifiche Java. –Per la sua implementazione si è implementato un metodo nativo che fa uso della Java Native Interface (JNI)
35
<XML......MOMIS/> Il metodo nativo Il metodo nativo è scritto in ANSI C ed è contenuto in una libreria dinamica La presenza della libreria dinamica non è obbligatoria al funzionamento di XmlTools: –Se la libreria è assente XmlReader è ancora in grado di allocare istanze, ma in questo caso richiede la presenza di un costruttore di default. Il metodo nativo non presenta problemi di portabilità posto che il sistema su cui viene compilato supporti le librerie dinamiche.
36
<XML......MOMIS/> Ricostruzione dello stato: Viene controllato se la classe implementa una delle interfacce Externalizable o XmlExternalizable Viene controllata la presenza, allinterno della classe da ricostruire, di codice personalizzato per interpretare linput (readObject) per ogni componente dello stato si hanno due possibilità –se il campo è un tipo primitivo, si assegna il valore presente nel doc. XML direttamente allistanza allocata nel passo precedente. –se il campo è un oggetto viene allocata una nuova istanza e il suo stato è ripristinato ricorsivamente
37
<XML......MOMIS/> Evoluzione delle classi (java) Le classi non sono entità immutabili Per ogni classe Java calcola lo SUID (Stream Unique IDentifier) –intero a 64 bit –uso del SHA-1 (Secure Hash Algotithm) Due versioni di una classe sono equivalenti se hanno lo stesso SUID. –una delle due dovà dichiarare esplicitamente lo SUID con cui è compatibile. XmlReader usa gli SUID per esegure i controlli di compatibilità
38
<XML......MOMIS/> Evoluzione delle classi (XmlReader) Uso di nomi simbolici dei campi e dei loro tipi Linsensibilità al cambiamento delle classi è ottenuta utilizzando un opportuno meccanismo di mapping tra i campi descritti in XML e quelli effettivamente presenti allinterno della classe in memoria. –solo i Campi aventi lo stesso nome e lo stesso tipo di quelli presenti nel doc. XML sono deserializzati, gli altri vengono ignorati Non tutti i cambiamenti consentono di ottenere unistanza valida, le specifiche Java indicano quali. XmlReader è conforme alle specifiche Java.
39
<XML......MOMIS/> XmlReader, altre caratteristiche Supporta la ricostruzione di istanze anche per i documenti Bilanciati. Possibilità di registrare dei callback per effettuare ulteriori validazioni o inizializzazioni prima che il grafo di oggetti sia ritornato allutilizzatore. (Es: apertura di file) 0100%
40
<XML......MOMIS/> Conclusioni XmlTools Per XmlTools sono state digitate 5564 linee di codice commentato. –XmlTools è attualmente utilizzato per serializzare e deserializzare lo stato dellintero sistema MOMIS in XML Durante la tesi sono state prodotte 8637 linee di codice totali. 0100%
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.