Un'infrastruttura per l'interoperabilità e lo scambio di oggetti in rete.

Daniele Falassi

A causa dell'evoluzione della rete mondiale, la necessità di una maggiore interoperabilità tra linguaggi è divenuta oggi una problematica molto importante. Di conseguenza sono stati creati strumenti come CORBA che consentono ad applicazioni distribuite scritte in linguaggi differenti di interoperare tramite un meccanismo per la chiamata remota di metodi. Una simile soluzione, però non è attuabile in un contesto di computazione mobile, dove è richiesta la possibilità di far migrare del codice. In questo senso, il framework Java si è rivelato un ottimo strumento per la realizzazione di ambienti per la mobilità, proprio perché consente di inviare il codice tra piattaforme differenti. E' possibile, ad esempio, far migrare un oggetto Java tra due applicazioni in esecuzione su sistemi differenti. Tuttavia si è vincolati ad utilizzare questo unico linguaggio. In questa tesi, viene presentata una infrastruttura in grado di far scambiare oggetti, fra applicazioni distribuite scritte in linguaggi di programmazione differenti. Non vi sono strumenti software noti che permettano questo meccanismo di interoperabilità. L'infrastruttura è costituita da delle API (Application Language Interfaces), da alcuni server di informazioni e da alcuni server di classi. Le API sono le classi di interfaccia tramite le quali le applicazioni possono utilizzare l'infrastruttura. Di queste API deve essere presente una versione per ciascun linguaggio utilizzato. Sui server di classi, che devono essere almeno uno per ogni linguaggio, sono registrate le definizioni delle classi che si intendono scambiare nell'infrastruttura. I server di informazioni consentono di individuare da quale server di classi scaricare una classe data. La comunicazione tra le diverse parti dell'infrastruttura avviene tramite lo scambio di messaggi XML. Vediamo ora brevemente il funzionamento dell'infrastruttura. Il programmatore deve anzitutto realizzare, per ogni classe che vuole scambiare, una versione in ciascun linguaggio. Queste diverse versioni devono essere registrate sui server di classi. Sui server di informazioni si deve registrare su quale server di classi si è posizionata ogni versione di una data classe. A questo punto una applicazione può scambiare oggetti che sono istanze delle classi che si sono registrate, nel modo seguente. Anzitutto, tramite le API, lo stato S dell'oggetto viene codificato in un messaggio XML. Questo messaggio viene inviato alle API dell'applicazione a cui si vuole inviare l'oggetto. Queste, ricevuto il messaggio XML, interrogano il server di informazioni per sapere dove è localizzata la classe di cui l'oggetto ricevuto è istanza. Una volta ricevuta la risposta, la API si connettono all'opportuno server di classi e ottengono la definizione per la classe cercata. Infine si costruisce un nuovo oggetto nella classe corrispondente a quella di partenza e nello stato S, che era contenuto nel messaggio XML. Nella tesi sono state realizzate API nei linguaggi Java e C#. Al fine di illustrare l'utilità dell'infrastruttura in un contesto per la mobilità viene presentato un semplice framework per agenti mobili: FAL.