Introduzione
La programmazione di grandi sistemi distribuiti è in continua evoluzione; per questo è richiesta un sforzo di programmazione sempre crescente per costruire un'appropriata struttura per le applicazioni distribuite: nel tempo sono state sviluppate molte applicazioni che generano skeleton per applicazioni distribuite;
spesso però utilizzando tali applicazioni si spende la maggior parte del tempo nella modifica dello skeleton stesso.
E' nata quindi la necessità di un framework che permetta ai programmatori di applicazioni distribuite di usare una notazione per le loro applicazioni più user- friendly possibile e che si possa utilizzare per generare degli skeleton delle applicazioni stesse facilmente modificabili.
Lo scopo della tesi è quello di realizzare un prototipo per la generazione automatica di skeleton di applicazioni distribuite in Java.
Il generatore di skeleton, implementato come libreria Java, creerà dei files che, dopo essere stati compilati e mandati in esecuzione, saranno i processi di un applicazione distribuita.
Si è quindi pensato di utilizzare come modello formale ORC, di Jayadev Misra e William R. Cook [1] poiché offre un modello per la programmazione concorrente e distribuita.
ORC (iniziali di Orchestration) è il modello formale per la descrizione di applicazioni distribuite.
Le espressioni ORC modellano orchestrazioni tra servizi concorrenti e/o distribuiti.
Il temine generico per definire un sevizio è sito (site); un sito può eseguire qualunque tipo di computazione: acquisizione e invio dati, elaborazione, chiamate di altri servizi, ecc...
Come esempio si potrebbe considerare l'espressione CNN, dove CNN è un servizio di news la cui chiamata pubblica una pagina di notizie. Chiamando CNN(d), con d data, è possibile ricevere le news della data specifica.
Un espressione ORC può anche essere la composizione di due o più espressioni.
ORC possiede tre operatori per la composizione di espressioni: ”>>” per la composizione sequenziale, “|” per la composizione simmetrica parallela e “where”
per la composizione asimmetrica parallela.
Per esempio l'espressione (CNN|BBC) modella l'esecuzione di due servizi di news contemporaneamente mentre (CNN>>BBC) modella l'esecuzione sequenziale dei servizi.
Lo scopo del lavoro è stato quello di realizzare un tool che, a partire da un programma ORC, produce una serie di classi Java che implementano completamente la struttura dell'applicazione modellata dal programma ORC.
Per ogni entità parallela/distribuita del programma ORC viene creato una classe Java eseguibile ed inoltre viene implementata tutta la struttura di comunicazione (attraverso i socket TCP/IP di Java) tra le varie entità che compongono l'espressione ORC.
I siti ORC sono eseguiti su diverse Java Virtual Machines che possono trovarsi sulla stessa o su diverse macchine di un cluster.
L'utente quindi deve solamente inserire il codice che implementa la chiamata del sito, non dovendosi occupare della struttura dell' applicazione distribuita che è stata implementata automanticamente a partire dall'espressione ORC.
Questa particolarità permette all'utente di guadagnare grande quantità di tempo in quanto è dispensato dallo sviluppo delle maggiori problematiche che riguardano la programmazione di applicazioni distribuite come la decomposizione in processi, la schedulazione, la comunicazione e la sincronizzazione tra i processi.
Anche se è attualmente in fase di sviluppo da parte di Misra e Cook [2] un semplice interprete del linguaggio ORC che implementa la valutazione dell'espressione ORC attraverso la comunicazione tra threads il presente lavoro è il primo tentativo di utilizzare il modello formale di ORC come framework per la generazione di applicazioni in grado di funzionare su di un sistema distribuito o parallelo.