Mots, programmazione collaborativa di Ettore Ferranti
Scenario locale: editor di sorgenti java con supporto per il syntax coloring, la compilazione e l’input/output da file Obiettivi Scenario distribuito: applicazione per l’editing di sorgenti java condivisi con supporto per la concorrenza e la tolleranza ai guasti
Scenario Il primo computer crea un documento condiviso Ogni computer che si connette alla rete rileva la presenza di un documento e può decidere di unirsi a chi lo sta modificando L’uso di Bonjour e Java permette di eseguire l’applicazione sulla maggior parte dei sistemi operativi, sia in rete locale che in wireless ad-hoc
Middleware, implementazione Apple dello standard Zeroconf (IETF) Multipiattaforma e multilinguaggio DNS e DHCP senza necessità di un server centralizzato Open-source Bonjour
Bonjour Java API Classe principale: DNSSD (astratta) I suoi metodi statici sono gli unici messi a disposizione dalla libreria Permette di registrare e cercare servizi in rete L’oggetto chiamante deve passare al metodo una classe che implementa una particolare interfaccia, per consentire a DNSSD di restituire ad essa il risultato (callback o poll object) Il risultato viene poi recuperato dal chiamante nel modo che esso preferisce (Mots utilizza il pattern Observer)
Presence Awareness Due tipi di servizi: utenti e documenti Ogni istanza di Mots è sempre consapevole di ogni utente e documento condiviso presenti in rete Users:Documents: Aristotele Platone Socrate Metafisica
Architettura Utilizzo di Layer diversi, ognuno specializzato in un compito particolare Particolare attenzione al riutilizzo dei componenti ed alla trasparenza dei livelli inferiori Possibilità di sostituire layer (UDP invece di TCP, sintassi C# invece di Java)
TCP layer send permette di inviare un messaggio (stringa) specificando il nome del destinatario con il metodo receive il server trasmette al livello superiore il messaggio ricevuto ogni server permette di registrare un servizio in rete locale, rendendolo visibile agli utenti in rete e creando una socket per ogni nuovo client che intende mandare messaggi (utilizzo di thread)
Pattern Observer BonjourBrowser è un oggetto del TCP layer che consente di avvertire chiunque si sia registrato della pubblicazione o della caduta di un certo servizio Gli oggetti BonjourBrowser di Mots sono due, uno per i servizi “User” ed uno per i “Document” BonjourBrowser (Observable) Obser ver
Messaggi Protocollo di messaggi per la registrazione di un subscriber all’host e la propagazione delle modifiche al documento Testuale, 5 tipi di messaggi client -> host e 2 tipi di messaggi host -> client Indipendente dal protocollo di trasmissione
Messaggi (2) Aristotele (host di “Metafisica”) Platone Socrate register:Platone register:Socrate insert:0:Socrate:hello insert:Metafisica:0:hello hellohellohello
Fault Tolerance Il nodo host condivide il documento distribuito “Doc”, gli editor sono connessi all’host e partecipano attivamente alla modifica del documento (hot stand by) Il nodo host cade, il documento condiviso non esiste più ma il suo stato è presente in tutti gli editor Elezione: tutti gli editor si candidano per diventare il nuovo host del documento, solo il primo arrivato riesce a creare un documento con lo stesso nome, gli altri vengono tutti rinominati da Bonjour Il vincitore dell’elezione è il nuovo host, tutti gli altri editor si registrano presso di lui e l’editing può continuare dallo stato in cui si era interrotto
Sviluppi Futuri Sicurezza: policy per specificare quali utenti sono autorizzati a vedere e/o editare il documento condiviso Identificazione: utilizzo di colori diversi per ogni editor, in modo da identificare immediatamente l’autore delle modifiche Linguaggi: aggiunta di moduli per la gestione di linguaggi diversi dal java o per l’auto-completamento del codice.
demo