Il modulo joinMap
Lo studio del problema dell'Object Fusion ha reso evidente l'imponente lavoro che deve essere fatto dal progettista per poter rendere realizzabile la ricostruzione corretta della risposta globale a partire dalle singole risposte locali. Nel tentativo di rendere maggiormente agevole tale attivita' del progettista si e' pensato di realizzare un nuovo modulo per SIDesigner, il modulo joinMap appunto.
Il modulo creato e' dotato di un'interfaccia grafica che permette al progettista di realizzare le sue applicazioni,finalizzate all'inserimento delle mappe di join, che risiedono nel server Global Schema.
Queste mappe di join permettono di definire la struttura Join Table.
L'interazione tra SIDesigner, di cui joinMap e' un modulo, e l'oggetto CORBA GlobalSchema viene realizzata indirettamente dall'oggetto java GlobalSchemaProxy.Modifiche al sw esistente
La classe JoinMap attualmente e' priva di metodi. E' necessario prevedere l'inserimento dei metodi getter() che permettano: di restituire le due classi su cui e' necessario effettuare il join (firstElement,secondElement), di restituire l'attributo joineable che determina se le due classi siano da fondere o meno, e soprattutto di restituire i campi significativi joinAttr su cui effettuare il join.
In particolare quest'ultima propertie assume la dignita' di classe. Infatti ora come ora e' costituita da un Vector of GlobalAttributes, ma questo tipo di implementazione non e' sufficiente a descrivere esaurientemente la struttura del dato. Per il futuro si prevede di implementare una classe abstract che permetta di modellare a pieno l'oggetto joinAttr e nel caso di matching diretto e nel caso di matching indiretto
A tal proposito la modifica piu' significativa e' da individuarsi nella necessaria introduzione di una nuova proprieta', ovvero l'attributo d'istanza thirdElement.
Analogamente a firstElement e secondElement, la proprieta' thirdElement e' di tipo SourceClass. Il significato della classe in questione e' il seguente.ThirdElement
Nei casi in cui non sia possibile individuare i campi di join in modo automatico e' necessario che il progettista inserisca esplicitamente (agevolato dall'interfaccia del modulo joinMap) su quali campi effettuarlo e soprattutto come, ovvero e' fondamentale che espliciti il matching da realizzare tra i valori di tali campi. Questo matching e' modellato da un insieme di tabelle isolate da gestire nel modo piu' conveniente.
Una proposta potrebbe essere quella di realizzare una "sorgente di join" da gestire alla stregua di una qualsiasi altra sorgente di MOMIS. In questa sorgente vanno inserite le tabelle compilate dal progettista che risultano essere alla fine classi locali a tutti gli effetti gestibili come quelle nelle altre sorgenti locali. La proprieta' thirdElement rappresenta una singola tabella inserita nella sorgente di join.
In alternativa ad una sorgente "dedicata" alle tabelle inserite dal progettista, si potrebbe pensare a tabelle inserite nelle sorgenti da integrare ed identificate opportunamente.
AGGIORNAMENTO:la soluzione adottata in fase di implementazione e' la seconda proposta, ovvero le "thirdElement" sono state implementate e gestite come classi locali gia' presenti nelle sorgenti da integrare.