architetture modulari e riconfigurabili su piattaforme
Transcript
architetture modulari e riconfigurabili su piattaforme
ARCHITETTURE MODULARI E RICONFIGURABILI SU PIATTAFORME MOBILI PER SCENARI PERVASIVI UN FRAMEWORK OPEN SOURCE Fontana D., Università di Modena e Reggio Emilia, DISMI, v. Amendola 2, 42122, Reggio Emilia, IT, [email protected] Vignoli M., Università di Modena e Reggio Emilia, DISMI, v. Amendola 2, 42122, Reggio Emilia, IT, [email protected] Di Marco F., Epoca S.R.L., v. Parigi 11, 40121, Bologna, IT, [email protected] Monti S., Epoca S.R.L., v. Parigi 11, 40121, Bologna, IT, [email protected] Pezzi C., Epoca S.R.L., v. Parigi 11, 40121, Bologna, IT, [email protected] Abstract La crescente adozione di dispositivi mobili rende sempre più reale e concreto lo scenario del Pervasive Computing, immaginato nei primi anni 90 da Mark Weiser. Nell'ambiente sempre più pervaso da dispositivi di ogni tipo (Smartphone, e-reader, GPS-enabled camera e tablet), le informazioni del mondo fisico vengono collezionate e utilizzate nel mondo virtuale per adattare applicazioni e servizi al contesto corrente ed ai bisogni dell'utente, sfruttando i numerosi sensori e le capacità computazionali e di connettività di cui questi dispositivi sono dotati. Questo scenario pone diverse sfide che sono state e sono tuttora oggetto di ricerca da parte della comunità scientifica; negli ultimi anni, con l'avvento dei moderni sistemi operativi mobili, queste sfide sono state raccolte anche dalla comunità Open Source, che si sta concentrando nel design di applicazioni mobili che mostrano aspetti più o meno avanzati di pervasività (ad esempio Openstreetmap Haklay, 2008). Una delle caratteristiche principali delle architetture software per scenari pervasivi è la capacità di adattarsi a differenti contesti, condizioni operative (es. mancanza di connettività) e all'attività dell'utente, ossia in generale la capacità di percepire il contesto (context-awareness) e di adattarsi ad esso (self-adaptation). L'adattamento al contesto pone l'accento sulla sfida di realizzare delle architetture software modulari e configurabili a runtime sia dal punto di vista dei componenti che realizzano la logica funzionale, sia dei componenti che realizzano la logica non funzionale, in modo tale da permettere alle applicazioni mobili di mostrare una certa flessibilità in tutti i possibili contesti di funzionamento. I casi d'uso in cui un software deve mostrare queste caratteristiche possono essere molteplici; un'applicazione mobile per la domotica, nel momento in cui l'utente entra in un ambiente con un set diffusori audio con connettività Wi-Fi, potrebbe dinamicamente aggiungere un nuovo componente alla UI che ne permetta il controllo remoto e lo streaming di contenuti audio; un'applicazione turistica potrebbe fornire delle funzionalità differenti se l'utente si trova in un museo o all'aperto; un'applicazione mobile per la sincronizzazione di dati potrebbe sostituire il componente che si occupa della persistenza dei dati su un server remoto con un componente che effettua la persistenza su un database SQL Lite locale se viene persa momentaneamente la connettività di rete. Da questi scenari è evidente come la capacità di realizzare dei software modulari e riconfigurabili a run-time semplifica drasticamente il design di applicazioni pervasive. La strada per supportare pienamente la realizzazione di applicazioni che sfruttino i concetti del Pervasive Computing (adattamento al contesto, contatti opportunistici e socialità) è quella di realizzare un framework Open Source che supporti le applicazioni nel mostrare caratteristiche di adattamento, riconfigurazione e ottimizzazione, ed in particolare possa fornire supporto per realizzare in modo semplice i casi d'uso mostrati sopra. Si sceglie la filosofia Open perché è quella più affine ai concetti del Pervasive Computing, in cui i modelli legacy tradizionali ostacolerebbero l'interoperabilità tra diversi componenti, che necessitano di comunicare tra di loro per creare un ecosistema pervasivo, dinamico, collaborativo ed in costante evoluzione. La realizzazione di software modulari e potenzialmente riconfigurabili non è supportata dai tradizionali modelli architetturali come quello a componenti, in quanto hanno caratteristiche di staticità a run-time. Dei nuovi modelli sono nati per garantire una maggiore dinamicità durante l'esecuzione; in particolare, il modello che mostra queste caratteristiche è il modello a componenti orientato ai servizi (SoC). Il modello SoC si distingue dal modello a componenti in quanto introduce: • Il concetto di contratto associato ad un componente, ossia quali servizi il componente espone e quali servizi richiede per funzionare. • Il concetto di applicazione come composizione di contratti, che sono indipendenti dai componenti che li implementano. • Il concetto di registro di servizi, mutuato da SOA, per registrare e reperire dinamicamente componenti che implementano un dato contratto. • Il concetto di dinamicità, in quanto la presenza del registro e del contratto pone le basi della sostituibilità a run-time dei componenti all'interno della composizione, in quanto la composizione non è legato al particolare componente. Questo modello, implementato con successo nel mondo delle applicazioni tradizionali, non ha un parallelo nel mondo mobile, proprio laddove la pervasività delle applicazioni è massima e massimo è il bisogno di mostrare caratteristiche di modularità e adattamento. Per questo si ritiene necessario realizzare un framework Open Source di supporto che sfrutti il modello SoC all'interno di applicazioni mobili, cercando di integrare al meglio i due paradigmi. Nel mondo JAVA, un framework Open Source che supporta il modello SoC è OSGi ed in particolare, è stata scelta l'implementazione di Apache, Felix unita al framework iPOJO, per la sua maturità e aderenza alle specifiche di OSGi. Il framework OSGi Apache Felix con il framework iPOJO, offre una serie di funzionalità di basso livello per realizzare software modulari e dinamici che possono essere riconfigurati a runtime; infatti, questo framework supporta pienamente il modello SoC e offre una serie di API che possono essere utilizzate come layer di base per realizzare il framework per applicazioni mobili pervasive. Quindi, le API di Apache Felix e iPOJO possono essere utilizzate per creare e modificare dinamicamente una composizione di servizi, per aggiungere dinamicamente nuovi componenti che implementano nuovi servizi o modificare i parametri di funzionamento di questi ultimi, evitando di minare le funzionalità e introducendo un overhead trascurabile durante l'esecuzione. Per quanto concerne l'architettura mobile, si è scelto di realizzare il framework sulla piattaforma Android, che si è affermato come piattaforma leader per soluzioni mobili Open Source. La piattaforma Android offre un SDK di sviluppo che abbraccia il linguaggio JAVA e parte delle librerie di sviluppo standard di quest'ultimo; essa mostra nella maggior parte dei casi una buona compatibilità con framework Open Source pensati per il mondo desktop; inoltre, l'SDK permette di accedere in modo semplice ai sensori presenti sui dispositivi mobili (gps, accelerometri, bussola) per avere caratteristiche di contextawareness, che sono necessarie per qualunque applicazione nello scenario del Pervasive Computing. Dal punto di vista implementativo, l'SDK di Android non offre supporto nativo al modello SoC e quindi all'adattamento e alla riconfigurabilità a run-time. Queste funzionalità vengono fornite dall'ambiente OSGi di Apache Felix che viene eseguito all'interno di una Activity o di un Service dell'applicazione Android. Tutti i servizi all'interno di OSGi possono accedere alle API fornite dall'SDK di Android, mentre quest'ultimo può a suo volta effettuare il tracking della disponibilità di particolari servizi forniti da componenti all'interno di OSGi. La comunicazione tre i due ambienti può avvenire in maniera più flessibile anche attraverso scambio di messaggi, utilizzando le funzionalità di broadcast offerte dall'SDK di Android. Tutta la logica di riconfigurazione e adattamento al contesto viene supportata dal framework costruito su Apache Felix che esegue all'interno dell'applicazione Android, mentre quest'ultima ne trae beneficio interagendo con esso tramite messaggi broadcast o tracking dei servizi in esecuzione su OSGi, che possono essere riconfigurati, adattati, aggiunti o rimossi dinamicamente in base al contesto. Quindi, grazie all'infrastruttura SoC di Apache Felix ed al framework costruito sulla piattaforma Android, l'applicazione, in base al contesto percepito, può dinamicamente effettuare il caricamento di nuovi servizi o riconfigurare quelli esistenti, supportando a pieno i casi d'uso mostrati in precedenza. La soluzione proposta cerca di fornire un framework per semplificare lo sviluppo di applicazioni mobili in scenari pervasivi, utilizzando e integrando delle soluzioni Open Source che si sono affermate come standard defacto nel mondo JAVA e nelle applicazioni mobili. In particolare, l'obiettivo è quello di fornire un framework con delle API di alto livello per realizzare applicazioni riconfigurabili e adattabili dinamicamente nello scenario del Pervasive Computing, utilizzando al meglio la piattaforma Android ed integrandolo con il framework OSGi Apache Felix. Il framework Open Source proposto verrà utilizzato per realizzare della applicazione innovative nello scenario delle smart cities per fornire al cittadino e/o al turista dei servizi di nuova generazione che sappiano adattarsi in ogni momento alle sue esigenze ed ai suoi bisogni. Parole Chiave: Pervasive Computing, Modularità, Riconfigurabilità, OSGi, Android.