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.