Sistemi Mobili M - Università di Bologna
Transcript
Sistemi Mobili M - Università di Bologna
Sistemi Mobili M Università di Bologna CdS Laurea Magistrale in Ingegneria Informatica II Ciclo - A.A. 2010/2011 Corso di Sistemi Mobili M (6 cfu) 07 – Supporto a Comunicazione Mobile (Messaging) e Gestione Eventi Docente: Paolo Bellavista [email protected] http://lia.deis.unibo.it/Courses/sm1011-info/ http://lia.deis.unibo.it/Staff/PaoloBellavista/ Messaging & Eventi - Sistemi Mobili M 1 Comunicazione Disaccoppiata: Messaging Come già detto più volte, importanza disaccoppiamento nella comunicazione/interazione fra componenti distribuiti mobili Talora si parla in generale di comunicazione middleware mobile come di scambio di messaggi (vedi S. Tarkoma, “Mobile Middleware”) a sottolineare l’importanza del disaccoppiamento Ogni sistema per mobile messaging deve definire: Principi e architettura Sintassi messaggi Protocollo scambio di messaggi Locator Talvolta il termine protocollo tende a includere anche sintassi e locator… Messaging & Eventi - Sistemi Mobili M 2 Messaging: Principi e Architettura Principio fondamentale: loose coupling (tramite protocolli/formati standard e aperti) In sistemi reali, anche estensibilità. Come? Identificatori di versione nei messaggi (versioni non riconosciute trattate come errori; compatibilità?) Formati con extension point Forward compatibility con possibilità di ignorare parti di messaggio non riconosciute (principio di robustezza) Usualmente API middleware per consentire applicazioni di utilizzare funzionalità comunicazione; talora middleware con visibilità dei requisiti di scambio dati e loro semantica Messaging & Eventi - Sistemi Mobili M 3 Messaging: Sintassi dei Messaggi Gestione marshalling/unmarshalling: Implementato a livello di applicazione Codice automaticam. generato (tipicamente basato su Interface Description Language – IDL – considerati a tempo di sviluppo) Introspezione (più trasparente per sviluppatore ma tipicamente più costoso a runtime) Come ci si accorda sul formato dei dati? Specifica (tipico approccio dei protocolli Internet con messaggi in formato binario) Negoziazione Receiver-makes-right (mittente usa suoi formati nativi ed esprime metadati per indicare quali sono) Principali tipologie di formato messaggi: Binary (ASN.1, …) Text-based (XML, JSON, …) Messaging & Eventi - Sistemi Mobili M 4 Messaging: Protocolli Oltre alle usuali proprietà dei protocolli per comunicazione in sistemi distribuiti (header con metadati e payload, metadati anche a livello applicativo, tipi di messaggi e con che pattern di scambio, …), particolare rilievo per gestione connessione Protocolli che “mimano” il livello di trasporto, con connessione applicativa in rapporto 1:1 con connessione a livello di trasporto Più spesso protocolli che disaccoppiano i due aspetti (funzionalità sessione persistente su connessioni di trasporto temporanee; vedi TCP e cambio di indirizzo IP dinamico) Vista “pura” end-to-end oppure uso di mediatori fino a livello applicativo? Ampio utilizzo di architetture e protocolli store-andforward (disaccoppiamento nel tempo, ottimizzazione implementazioni con affidabilità, violazione del principio end-to-end) 5 Messaging & Eventi - Sistemi Mobili M Messaging: Protocolli Classici schemi di scambio messaggi: one-way, two-way, requestresponse, subscribe notify, conversation, … Importante: ruolo a livello di trasporto (initiator-listener) non necessariamente lo stesso che a livello applicativo/messaging solita distinzione bloccante vs. non bloccante ¾ ¾ Metodo polling, usualm. con oggetto (promise o future) dato al mittente; si può fare inspect o claim bloccante Callback Con quale dei due schemi è più semplice e robusto lo sviluppo di applicazioni? Messaging & Eventi - Sistemi Mobili M 6 Messaging: Locator Siamo abituati a locator strettissimamente legati a indirizzi di rete Ma anche locator più articolati e complessi, ad es. che includono numeri di porta (trasporto) o path (URL) In sistemi mobili molte tipologie di locator, anche non IPbased, specie in passato quando IP parzialmente utilizzato Comunque, anche oggi, possibilità di: Locator “trasparenti”, tipicamente pensati come URI e codificati XML (alza livello di astrazione+disaccoppiamento) Locator “opachi”, come in CORBA. Necessità di middleware per generare e utilizzare locator opachi Gestione mobilità è un problema network-layer? Ovviamente, per quanto ci siamo già detti nel corso, NON SOLO… Si dice anche che host mobili sono gestiti come second-class citizen; verso locator indipendenti da network layer… Messaging & Eventi - Sistemi Mobili M 7 Messaging: Progettare per la Mobilità Usuali considerazioni generali su: Utilità proxy ad es. per spezzare in due parti connessioni di trasporto (rottura principio end-to-end) Problemi Network Address Translation (NAT) quando nodi mobili vogliono fornire servizi (ma si veda anche FTP e IRC…) Inoltre: Capacità di completare lo schema di scambio messaggi anche se entità in comunicazione si muovono Utilizzo di classiche connessioni a livello di trasporto è usualmente preferito Sintassi snella e contenuto messaggi ridotto, anche compressione Sicurezza a livello di messaggio: con approcci tipo SSL (sicurezza a livello connessione) che tipo di problemi se rompiamo principio end-to-end? Message-level security con sicurezza applicata a (parti di) payload, non a header; ovviamente anche combinazione di connection e message Messaging & Eventi - Sistemi Mobili M 8 Messaging: Reliability Come al solito: Distinzione fra end-to-end e hop-by-hop Tecnica di base con acknowledgement e ritrasmissioni (anche a livello applicativo) Tipi di ACK: Normali Cumulativi Negativi Piggy-backed In-order delivery? Qualche volta sacrificata per motivi di efficienza D’altronde, riduzione di affidabilità per motivi di performance è un concetto ben noto (DNS, NTP, SIP, … tipicamente utilizzano UDP) Messaging & Eventi - Sistemi Mobili M 9 Esempi di Messaging: Java Message Service (JMS) Possibilità di chiedere semantica only once per consegna messaggi (precisamente once-and-only-once per uso persistente, at-most-once per uso non persistente) Disaccoppiamento nel tempo dato da destination (queue o topic) durature Parziale accoppiamento temporale per topic: ridotto tramite durable subscription Possibilità di ricezione non bloccante tramite listener Uso di ConnectionFactory Messaggi inviati all’interno di una sessione (tramite un determinato oggetto Session) verso la stessa destinazione godono proprietà di in-order delivery Tre tipologie di ACK (lazy, automatic, client-side) Messaging & Eventi - Sistemi Mobili M 10 Obiettivi di Design di JMS JMS è parte della piattaforma J2EE. Obiettivi: Consistenza con le API dei sistemi di messaging esistenti Indipendenza dal vendor del sistema di messaging Copertura della maggior parte delle funzionalità comuni nei sistemi di messaging Promuovere la tecnologia Java Java™ Application JMS API JMS JMS Provider Provider IBM MQSeries Progress SonicMq JMS JMS Provider Provider Fiorano Messaging & Eventi - Sistemi Mobili M BEA JMS Provider SUN MQ 11 Riassunto “Grafico” delle API JMS Messaging & Eventi - Sistemi Mobili M 12 Reliability tramite ACK: ad es., ACK Automatici Prospettiva lato produttore e consumatore Differenze fra caso persistent e nonpersistent Quando ci possono essere messaggi duplicati? Quando ci può essere perdita di messaggi? Inoltre, tre casi di ack differenziati Messaging & Eventi - Sistemi Mobili M 13 Persistenza: 2 Modalità di Consegna PERSISTENT ¾ ¾ Default Specifica al provider JMS di garantire che il messaggio non sia perso quando in transito, ad esempio a causa di un guasto del provider JMS NON_PERSISTENT ¾ ¾ NON richiede la memorizzazione dei messaggi lato JMS provider Migliori risultati di performance Metodo SetDeliveryMode() nell’interfaccia MessageProducer ¾ ¾ producer.setDeliveryMode(DeliveryMode.NON_PERSIS TENT); forma estesa: producer.send(message, DeliveryMode.NON_PERSISTENT, 3,10000); Messaging & Eventi - Sistemi Mobili M 14 Priorità e Expiration nella Consegna dei Messaggi 10 livelli di priorità da 0 (più basso) a 9 (più alto) default = 4 ¾ ¾ Uso del metodo setPriority() dell’interfaccia MessageProducer, ad esempio producer.setPriority(7); o la forma estesa producer.send(message, DeliveryMode. NON_PERSISTENT, 7, 10000); Expiration: possibilità di configurare TTL tramite setTimeToLive() dell’interfaccia MessageProducer ¾ ¾ producer.setTimeToLive(60000); o forma estesa, producer.send(message, DeliveryMode.NON_PERSISTENT, 3, 60000); Messaging & Eventi - Sistemi Mobili M 15 Esempi di Messaging: CORBA Messaging CORBA Messaging specification include: Asynchronous Messaging Interface (AMI) Sia possibilità di polling che di callback (callback passato come oggetto CORBA, quindi anche non nello stesso spazio di indirizzamento del cliente) Time Independent Invocation (TII) per specificare oggetti CORBA che svolgano ruolo di router per messaggio Razionale: mittente e destinatario possono essere disconnessi temporaneamente Formano una rete di store-and-forward CORBA locator = Interoperable Object Reference (IOR), con profili differenti a seconda del protocollo di binding Messaggi in binary format = Common Data Representation (CDR) Estrema flessibilità nella scelta protocollo Messaging & Eventi - Sistemi Mobili M 16 CORBA AMI: Modalità Callback Callback: cliente fornisce metodo di callback richiamato dal supporto al completamento attraverso una specifica fireand-forget (invocata automaticamente) Anziché: int somma (in int i, in int j, out int somma) void sendcallback_somma (in int i, in int j) void callback_somma (in int success, in int somma) Usiamo due metodi cambiando solo implementazione cliente e non parte di servizio Cliente chiama sendsomma ORB invoca callbacksomma CORBA DII e AMI 17 17 Messaging & Eventi - Sistemi Mobili M CORBA AMI: Modalità Polling Asincrona polling: cliente decide quando e se interrogare metodo di verifica del completamento operazione remota (ottenendo risultati), creato dal supporto Anziché: int somma (in int i, in int j, out int somma) void sendpoll_somma (in int i, in int j) void pollsomma (out int success, out int somma) Si recupera su richiesta invocando l’operazione pollsomma generata automaticamente dal supporto CORBA CORBA DII e AMI 18 Messaging & Eventi - Sistemi Mobili M 18 Esempi di Messaging: Extensible Messaging and Presence Protocol (XMPP) Progettato essenzialmente per instant messaging RFC 3920 basata sull’implementazione esistente del protocollo Jabber; buona popolarità per utilizzo da parte di Google, Twitter, Facebook, … Include meccanismi publish/subscribe, per aggiornamento presenza e stato, per service discovery Modello client-server: cliente invia un flusso dati XMPP a server, dopo negoziazione parametri Modello peer-to-peer: server si coordinano per consegna al destinatario Uso di cosiddette stanza, di tre tipologie: Message stanza – comunicazione uno-uno, simile email Presence stanza – semplice meccanismo pub/sub, comunicazione trasferita a tutti subscriber Info/Query stanza – meccanismo request-response Messaging & Eventi - Sistemi Mobili M 19 Esempi di Messaging: Extensible Messaging and Presence Protocol (XMPP) Messaggi XMPP sono stream codificati in XML Data la larga adozione, buon candidato come supporto per messaging in sistemi mobili, ANCHE SE: Non specificatamente progettato per sistemi mobili Costoso processamento XML, costosa gestione connessioni in termini energetici Costose riconnessioni a XMPP server (necessario ristabilire una nuova sessione di interazione per ogni nuova connessione di trasporto, invio di dati XML non trascurabile a ogni inizio di sessione) Android ne implementa una variante, con protocollo non basato su XML e NO creazione di nuova sessione per ogni nuova connessione Messaging & Eventi - Sistemi Mobili M 20 Esempi di Messaging: Extensible Messaging and Presence Protocol (XMPP) Messaging & Eventi - Sistemi Mobili M 21 Esempi di Messaging: Web Services SOAP è costruito su modello di interazione basato sullo scambio di messaggi Architettura basata su sender, receiver e intermedi Locator = HTTP URI Document-style SOAP: messaggi come documenti XML-based che devono essere processati Possibilità di differenti protocol binding, ma decisamente il più utilizzato è HTTP, uso di metodo POST (usato più come protocollo di trasporto, ignorando sua semantica applicativa) In ambienti mobili, dove HTTP è talora unico protocollo praticamente utilizzabile a causa di firewall e NAT, questo uso/abuso di HTTP potrebbe essere considerato legittimo e prendere piede… Anche specifica per binding su email e su XMPP Messaging & Eventi - Sistemi Mobili M 22 Esempi di Messaging: Representational State Transfer (REST) REST è sostanzialmente uno stile architetturale di soluzione, Resource Oriented Architecture (Roy Fielding, UCI PhD Thesis, 2000) Promuovere interazione client-server, stateless, che sfrutti possibilità di caching, anche con possibilità di code-on-demand verso cliente Ogni risorsa ha un identificatore persistente; idea di trasferire non risorse ma loro rappresentazioni tramite protocollo HTTP Vincolo: scambio di messaggi self-descriptive (linguaggi per rappresentazione, negoziazione modalità supportate, …) Messaging & Eventi - Sistemi Mobili M 23 Esempi di Messaging: Representational State Transfer (REST) Locator = HTTP URI Tre tipi di metadata inclusi in header HTTP: Resource metadata – dati sulla risorsa, ad es. timestamp di ultima modifica Representation metadata – dati sulla rappresentazione trasferita, ad es. suo media type Control metadata – dati sul messaggio, ad es. lunghezza e possibilità caching Esempio notevole: RESTful Web services RESTful Web service come semplice Web service implementato usando HTTP e principi REST, quindi collezione di risorse con 3 aspetti definiti: base URI per servizio, ad es. http://example.com/resources/ Internet media type dati utilizzati nel servizio (usualm. JSON o XML) Insieme di operazioni supportate dal servizio tramite metodi HTTP (ad es., POST, GET, PUT o DELETE) Messaging & Eventi - Sistemi Mobili M 24 Esempi di Messaging: Representational State Transfer (REST) Esempio notevole: RESTful Web services Risorsa URI per collezione di risorse, ad es., GET http://example.com/re sources/ef7d-xj36p POST DELETE Lista dei membri della collezione Sostituisce intera collezione Crea un nuovo elemento per la collezione Rimuove intera collezione Ottiene rappresentazione dell’elemento desiderato, espresso in Internet media type appropriato Sostituisce o crea un elemento della collezione Tratta l’elemento come una collezione e crea un nuovo elemento al suo interno Rimuove un elemento della collezione http://example.com/re sources/ URI singolo elemento, ad es. PUT Esempi di uso di REST oggi: Maggioranza di blog Web (scaricamento di file XML in formato RSS/Atom, che contengono link ad altre risorse S3 di Amazon.com OpenStreetMap (interfaccia REST) Messaging & Eventi - Sistemi Mobili M 25 Esempi di Messaging: Representational State Transfer (REST) Messaging & Eventi - Sistemi Mobili M 26 Gestione Eventi e Sistemi Publish/Subscribe Consegna eventi da publisher a subscriber ¾ Eventi come messaggi con contenuto ¾ One-to-many, many-to-many (sistemi tradizionali per messaggi sono queue-based e one-to-one) Spesso realizzati sulla base di sistemi di messaging e soluzioni store-and-forward Paradigma di comunicazione di frequente uso, specie nel mobile ¾ Disaccoppiamento in spazio e tempo Sistema ad eventi come servizio logicamente centralizzato ¾ Comunicazione anonima ¾ Possibilità di utilizzo di filtri (su header o su totalità messaggio) ¾ Primitive di base: subscribe, unsubscribe, publish, anche con filtri Varie topologie per routing e semantiche associate all’invio e notifica di eventi Operazioni associate tipicamente non bloccanti (polling, callback) ¾ 27 Messaging & Eventi - Sistemi Mobili M Architettura Generale per Sistema Publish/Subscribe Pub/Sub Service Subscriber Sottoscrizioni Su re bs re que crib sp st e on / se Publisher Notifica istanze di messaggi Situation Notification Consumer Notify Notification Engine Subscription Manager Riceve notifiche Esegue matching e invia notifiche ai consumer appropriati Sottoscrizioni Gestisce sottoscrizioni su delega publisher Messaging & Eventi - Sistemi Mobili M 28 Event Router e Topologie Event router o broker Fa da mediatore (disaccoppiamento) fra publisher e subscriber Uso di tabella di routing (anche con filtri) per dispatching di eventi in locale o a quale router vicino; router distribuiti per ottenere scalabilità, affidabilità e alta disponibilità Filtri anche basati su contenuto e content-based routing Altri requisiti non-funzionali: notifica entro intervalli di tempo (bounded delivery time), Quality of Service, fault-tolerance, ordinamento (causal order, total order) Possibili topologie di router: Centralizzata Gerarchica (notifiche sempre inviate a master, radice dell’albero distribuzione) Ciclica, aciclica (peer-to-peer, ciclico permette ridondanza ma servono tecniche di minimum spanning tree per prevenire cicli) Basato su rendez-vous point (router speciale che fa da rendev-vous, tipicamente per tipologia pre-determinata di eventi) Qualcuno vi ha parlato di Distributed Hash Table (DHT)? Messaging & Eventi - Sistemi Mobili M 29 Propagazione di Interessi e Sottoscrizioni Una delle funzioni principali di router è propagare notifiche a router vicini che hanno interesse in quell’evento Proprietà da raggiungere: ridotto overhead forwarding, alte performance, supporto veloce variazioni Simple routing: ogni router conosce tutte sottoscrizioni del sistema globale (flooding sottoscrizioni) Identity-based routing: non fatto forwarding se messaggio sottoscrizione già circolato Covering-based routing: forwarding dei soli filtri sottoscrizione più generali (problemi con unsubscription?) Merging-based routing: permette di fondere diverse entry tabella di routing (usualm. combinato con covering, anche qui problemi di unsubscription) Notifiche usualmente distribuite su reverse path di subscription Messaging & Eventi - Sistemi Mobili M 30 Decisione di Routing Dipendentemente da che cosa viene utilizzato per prendere decisioni di routing, classificazione in: Channel/topic-based: sulla base del canale (usualm. con nome) su cui viene pubblicato l’evento. Accordo fra pub/sub su nome canale, anche indirizzo multicast associato a canale Subject-based: sulla base del subject (argomento) dell’evento, campo singolo di info Header-based: sulla base di un insieme di campi. Ad es. SOAP supporta routing header-based dei suoi messaggi Content-based: sulla base dell’intero contenuto. Maggiore espressività, maggiori costi Anche context+content-based routing, particolarmente adatto per sistemi/servizi mobili, con filtri per eventi dipendenti da contesto Messaging & Eventi - Sistemi Mobili M 31 OMG Distributed Data Service (DDS) Specifica OMG (non basata su CORBA né fortemente interoperabile) per servizio distribuzione dati progettato per sistemi real-time Specifica definisce API per comunicazione publish/subscribe cosiddetta data-centric, ovvero middleware DDS fornisce astrazione di spazio globale di dati accessibile a tutte applicazioni interessate Utilizzo di combinazione di oggetti Topic e chiavi per identificare in modo unico istanze all’interno di stream di dati dello stesso topic Supporto a content filtering e negoziazione qualità Utilizzabile per propagazione distribuita di segnali, dati ed eventi CORBA Event Service (non data-centric e no supporto QoS); CORBA Notification Service (filtri, QoS, ma obbligo utilizzo CDR e IIOP) Messaging & Eventi - Sistemi Mobili M 32 Content Subscription: Partizioni DDS Partizioni sono spazi di nomi che permettono di dividere logicamente un dominio DDS Publisher/Subscriber possono decidere a tempo di esecuzione (e non a tempo di creazione come per JMS Topic) su quali partizioni pubblicare/sottoscrivere i dati Affinché un DataReader possa ricevere i messaggi di un DataWriter è necessario condividere sia lo stesso Topic sia la stessa partizione Partizioni considerate come una policy di QoS 33 Messaging & Eventi - Sistemi Mobili M Negoziazione QoS in DDS Perché un Subscriber possa ricevere pubblicazioni di un Publisher, proprietà di QoS devono essere compatibili Protocollo di negoziazione Richiesta/Offerta DataWriter Publisher DomainParticipant Subscriber Requested Requested Requested Requested Requested Offered QoS QoS QoS QoS QoS QoS Comunicazione non stabilita QoS:Durability QoS:Presentation QoS:Deadline QoS:Latency_Budget QoS:Ownership QoS:Liveliness QoS:Reliability QoS incompatibile DataReader DDS supporta diverse modalità di invio di messaggi (es. best-effort, reliable) e consente alle entità di gestire persistenza informazioni Messaging & Eventi - Sistemi Mobili M 34 Qualità in Termini di Reliability DDS prevede due politiche di QoS per l’affidabilità dei messaggi: BEST_EFFORT – NON garantito tutti messaggi siano ricevuti, né l’ordine di consegna RELIABLE – garantito tutti messaggi siano ricevuti e ordine di consegna. Tramite Publisher che ri-inviano dati a Subscriber se necessario e Subscriber che danno feedback (ack) alla ricezione In caso reliable, tutti messaggi inviati sono mantenuti in coda di history in attesa di essere confermati (lato publisher) e processati dall’applicazione (lato subscriber); dimensione coda definibile mediante policy di HISTORY Possibile definire anche quante risorse (es. memoria, max istanze) utilizzare per mantenimento dati mediante policy RESOURCE_LIMITS 35 Messaging & Eventi - Sistemi Mobili M Qualità in Termini di Durability Mediante policy Durability è possibile definire se e quanti dati mantenere lato publisher per poter essere richiesti successivamente DDS supporta tre tipi di persistenza: ¾ VOLATILE – No Instance History Saved ¾ TRANSIENT – History Saved in Local Memory ¾ PERSISTENT – History Saved in Permanent storage DataWriter Publisher DomainParticipant Permanent Storage Local Memory Durability=Persistent Durability=Transient Messaging & Eventi - Sistemi Mobili M 36 Qualità DDS: Altre Policy DDS supporta serie di altre policy per definire: Ordinamenti ricezione dei messaggi (DESTINATION_ORDER e PRESENTATION) Priorità dei messaggi (LATENCY_BUDGED) Esclusività su alcuni tipi di dato (OWNERSHIP) Autenticazione e sicurezza dei dati (USER_DATA) Vincoli temporali su rate invio dei messaggi (TIME_BASED_FILTER) Fault detection e heartbeat (LIVELINESS) Per documentazione dettagliata, riferimenti utili: ¾ ¾ Getting Started Guide www.rti.com/eval/rtidds44d/RTI_DDS_GettingStarted.pdf RTI DDS User’s Manual www.dre.vanderbilt.edu/~mxiong/tmp/backup/RTI_DDS_UsersManual.pdf Messaging & Eventi - Sistemi Mobili M 37 Modello Java per Eventi Distribuiti Anche Java ha un modello per distribuzione di eventi, basato su RMI, per es. (soprattutto) utilizzato in Jini Basato su Remote Event Listener (consumatore registrato per ricevere certi tipi di eventi da certi oggetti, metodo notify()) Oggetto Remote Event come oggetto restituito in notifica (dati, riferimento a oggetto sorgente, oggetto handback, identificatore unico) Meccanismo di lease Specifica prevede possibilità di definire Distributed Event Adaptor che realizzano filtri e politiche QoS ¾ Idea di sfruttare oggetto handback, fornito alla sorgente evento, per passare stato e comportamento (ad es. per implementare filtro per eventi) Messaging & Eventi - Sistemi Mobili M 38 Modello Java per Eventi Distribuiti package net.jini.core.event; public class RemoteEvent { public long getID(); public long getSequenceNumber(); public java.rmi.MarshalledObject getRegistrationObject(); } Eventi in componenti locali possono trasferire anche stato oggetto piuttosto complesso Non nel distribuito: solo info su come consentire ritrovamento stato Evento remoto come oggetto serializzabile trasferibile fra listener Idea, “rubata” da sistemi Xt Intrinsics e Motif: registrare cliente includendo handback, restituito con ogni evento Ad es. un tassista Jini registra interesse in prenotazioni taxi mentre passa per un’area (handback include locazione); quando riceve evento può essere informato della vecchia locazione al momento della registrazione Possibilità di registrare altri oggetti per notifica (delega): in questo caso handback può servire come “reminder” con info di chi ha fatto subscription (modello stock broker) Messaging & Eventi - Sistemi Mobili M 39 Modello Java per Eventi Distribuiti Registrazione eventi Jini non specifica come registrare listener presso sorgenti di eventi; solo specifica di utilizzo di una classe come valore ritorno dalla sottoscrizione: package net.jini.core.event; import net.jini.core.lease.Lease; public class EventRegistration implements java.io.Serializable { public EventRegistration(long eventID, Object source, Lease lease, long seqNum); public long getID(); public Object getSource(); public Lease getLease(); public long getSequenceNumber(); } Quindi programmatore della sorgente di eventi deve implementare: public EventRegistration addRemoteEventListener(RemoteEventListener listener); Messaging & Eventi - Sistemi Mobili M 40 Modello Java per Eventi Distribuiti Modello eventi Java locali prevede tutti oggetti nelo stesso spazio indirizzamento Jini come comunità di oggetti distribuiti e cooperanti tramite proxy Per eventi remoti, rovesciamento direzione proxy Ad es. cliente Jini usa proxy per accedere servizio e tramite esso si registra come listener ¾ Serve un metodo del proxy per aggiungere event listener Proxy chiamerà il “vero” metodo di aggiunta listener sulla risorsa scoperta Chiamata di registrazione evento locale al proxy; chiamata del proxy di registrazione remota alla risorsa Come se risorsa reale ottenesse un proxy per cliente da usare nella catena di notifica 41 Messaging & Eventi - Sistemi Mobili M General Event Notification Architecture (GENA) Come già detto utilizzata principalmente in UPnP Control point è listener dei cambiamenti di stato dispositivo ¾ 0 ottiene indirizzo ¾ 1 scopre dispositivo ¾ 2 trova descrittore XML ottiene URL per eventing ¾ 4 si registra Estrema semplicità: Invio e ricezione notifiche tramite HTTP su TCP/IP o multicast UDP UPnP UPnPvendor vendor UPnP UPnPForum Forum UPnP UPnPDevice DeviceArchitecture Architecture HTTP HTTP TCP TCP IP IP Messaging & Eventi - Sistemi Mobili M GENA GENA GENA: Sottoscrizione Control point si deve registrare prima di poter ricevere qualsiasi evento SUBSCRIBE SUBSCRIBEpublisher publisherpath pathHTTP/1.1 HTTP/1.1 HOST: publisher host:publisher HOST: publisher host:publisherport port CALLBACK: <delivery URL> NT: upnp:event TIMEOUT: Second-requested subscription duration Dispositivo accetta sottoscrizione: invia immediatamente un evento speciale (iniziale) a control point con valori di tutte variabili di stato HTTP/1.1 HTTP/1.1200 200OK OK SID: uuid:subscription-UUID SID: uuid:subscription-UUID TIMEOUT: TIMEOUT:Second-actual Second-actualsubscription subscriptionduration duration Messaging & Eventi - Sistemi Mobili M GENA: Notifiche Quando una variabile di stato cambia valore presso dispositivo: NOTIFY NOTIFYdelivery deliverypath pathHTTP/1.1 HTTP/1.1 HOST: delivery host:delivery HOST: delivery host:deliveryport port CONTENT-TYPE: CONTENT-TYPE:text/xml text/xml NT: upnp:event NTS: upnp:propchange SID: uuid:subscription-UUID SEQ: event key <e:propertyset xmlns:e="urn:schemas-upnp-org:event-1-0"> <e:property> <variableName>new value</variableName> </e:property> Altri (eventuali) nomi di variabile e valori </e:propertyset> Messaging & Eventi - Sistemi Mobili M Really Simple Syndication (RSS) e Atom Anche se in forma molto semplificata, usiamo spesso sistemi a eventi, tutte le volte che vogliamo rompere classica interazione sincrona+bloccante clienteservitore Come sapete, RSS come famiglia di specifiche per information feed in XML da scambiare su Web. Ampiamente utilizzato per blog, notizie, risorse audio/video Anche questo è essenzialmente un sistema pub/sub; molto semplice, solo si fa polling client-initiated di un URL noto a priori; informazioni scambiate in XML Numerosi Web browser supportano RSS; anche diversi clienti applicativi specifici per RSS Alternativa: Atom (RFC 4287 e RFC 5023), anche in questo caso basato su HTTP e XML Messaging & Eventi - Sistemi Mobili M 45 SIP Event Framework Notifiche asincrone sono essenziali per realizzare molti servizi SIP (servizi automatici di callback, liste di amici in linea, servizi di attesa messaggi, ...) Per questo esiste SIP Event Framework (RFC 3265), basato su metodi SUBSCRIBE e NOTIFY Eventi SIP identificati da tre elementi: Request URI, tipo evento e corpo messaggio (opzionale) Esempio notevole di utilizzo: servizio di presenza, con presentity e watcher ¾ ¾ ¾ Presence URI nella forma pres:paolo@domain Problemi di scalabilità della soluzione Servirebbero organizzazione gerarchica in domini e azioni di aggregazione di eventi su località per ridurre numero di notifiche Messaging & Eventi - Sistemi Mobili M 46 Web Services Event&Notification Due meccanismi chiave per implementare pub/sub per Web services: WS-Eventing e WS-Notification (standardizzazione in 2006) WS-Eventing come specifica di protocollo con cui Web service devono effettuare/accettare registrazioni per notifiche di eventi ¾ ¾ ¾ Meccanismi per creare/cancellare subscription Definire expiration time, consentire rinnovo Supporto a filtri (diversi linguaggi per definizione di filtri possono essere utilizzati) WS-Notification come specifica per consentire a Web service di fare disseminazione di dati verso altri Web service ¾ ¾ Anche possibilità di organizzazioni articolate su interessi (chiamati topic) e filtri basati su interessi Topologie distribuite per broker di notifica Messaging & Eventi - Sistemi Mobili M 47 Web Services Event&Notification Possibile subscription di terze parti (diretta, senza broker) Più usuale subscription tramite broker per disaccoppiamento Messaging & Eventi - Sistemi Mobili M 48 Esempio di Programmazione WS-Event&Notification Ad es., come realizzare WS subscriber utilizzando IBM WebSphere: Come al solito occorre ottenere WSDL file per servizi notification broker e subscription manager (NotificationBroker.wsdl e SubscriptionManager.wsdl) Se non già disponibili lato cliente, eseguire wsimport per generare client stub Fare look up su notification broker (serve riferimento a servizio notification broker) Creare oggetto subscription request e configurare rif. a consumer Creare oggetto subscribe per includere dettagli su sottoscrizione, come riferimento a consumer per notifica import org.oasis_open.docs.wsn.b_2.Subscribe; import javax.xml.ws.wsaddressing.W3CEndpointReference; import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder; // Crea oggetto subscription request. DEVE contenere // ConsumerReference e PUO’ includere filtro, InitialTerminationTime // e SubscriptionPolicy Subscribe subscribeRequest = new Subscribe(); W3CEndpointReference consumerReference = new W3CEndpointReferenceBuilder().address(consumerURI).build(); subscribeRequest.setConsumerReference(consumerReference); Messaging & Eventi - Sistemi Mobili M 49 Esempio di Programmazione WS-Event&Notification Definizione di espressione topic come filtro per la registrazione Possibile associare un oggetto Filter alla richiesta di registrazione per indicare quali eventi sono di interesse (filtro basato su topic, contenuto messaggio o entrambi). Ad es. filtro per topic (con classi helper IBM): import com.ibm.websphere.sib.wsn.jaxb.base.FilterType; import com.ibm.websphere.sib.wsn.jaxb.base.TopicExpressionType; // Preparare espressione topic topicExpression = topicNamespacePrefix + ":" + topicExpression; TopicExpressionType topicExpressionType = new TopicExpressionType(); topicExpressionType.setExpression(topicExpression); // Specificare mapping da prefisso namespace a topic namespace URI topicExpressionType.addPrefixMapping(topicNamespacePrefix, topicNamespace); // Specificare dialect TopicExpression da utilizzare topicExpressionType.setDialect(topicDialect); // Creazione filtro FilterType filter = new FilterType(); // Aggiunta espressione a filtro e configurazione richiesta // subscribe con filtro filter.addTopicExpression(topicExpressionType); subscribeRequest.setFilter(filter); Messaging & Eventi - Sistemi Mobili M 50 Esempio di Programmazione WS-Event&Notification Specifica di durata registrazione e invio richiesta Due modalità per specificare expiration time di registrazione: 1) namespace URI e oggetti QName 2) factory di ausilio JAXB ObjectFactory import javax.xml.bind.JAXBElement; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.Duration; // Opzione 1: Specifica durata (1 anno “P1Y” a partire da ora) DatatypeFactory factory = DatatypeFactory.newInstance(); Duration duration = factory.newDuration(”1Y”; JAXBElement<String> initialTerminationTime = new JAXBElement<String>( new QName("http://docs.oasis-open.org/wsn/b-2", "InitialTerminationTime"), String.class, duration.toString()); // Opzione 2: org.oasis_open.docs.wsn.b_2.ObjectFactory objectFactory = new org. oasis_open.docs.wsn.b_2.ObjectFactory(); initialTerminationTime = objectFactory.createSubscribeInitialTerminationTime(duration.toString()); subscribeRequest.setInitialTerminationTime(initialTerminationTime); org.oasis_open.docs.wsn.b_2.SubscribeResponse subscribeResponse = port.subscribe(subscribeRequest); Messaging & Eventi - Sistemi Mobili M 51