• Non ci sono risultati.

4.3 Architettura dell’ENS

4.3.1 DHTBundle

Analizziamo in modo più completo il DHTBundle, iniziando dalla struttura dei package, per poi soffermarci sull’implementazione delle classi principali e quale contributo forniscono nella logica del processo di notifica.

Figura 4.9: Struttura dei packages del DHTBundle

Spieghiamo brevemente la funzione di ciascuna delle classi o file di interesse contenuti nel DHTBundle:

- META-INF.MANIFEST.MF: file di manifest del DHTBundle

- context.dht.activator.DHTActivator: è l’activator class del il DHT-Bundle

- context.dht.activator.util.PastryProperties: file di configurazione per la libreria freepastry utilizzata

- context.dht.interfaces.IDHT: implementa l’interfaccia con i metodi che il bundle offre esternamente, come servizio, agli altri bundles

- context.dht.PastryDHT: implementazione dell’interfaccia IDHT

- context.dht.MyScribeClient: implementa la logica del paradigma SCRI-BE

- context.dht.MyScribeContent: implementa il payload delle notifiche nella rete SCRIBE

- la directory resources contiene le librerie esterne di cui fa uso il bundle nella sua implementazione

Un file non contenuto nel package ma importante nel DHTBundle è il file Pa-stryPortConf.conf. Esso sarà posizionato nella root folder del framework OSGI e consente di settare parametri di rete della pastry network su cui si basa SCRIBE: IP del nodo, bindPort e bootPort

Prima di analizzare la logica implementata nelle classi e file su descritti, dob-biamo dire che tutta l’implementazione del DHTBundle è basata sulla libreria FreePastry[33].

La libreria FreePastry

FreePastry è un’implementazione open-source di Pastry per il deployment in Internet. Inizialmente fu rilasciata come strumento per consentire la valutazione del paradigma Pastry e consentire ricerca e sviluppo nei subsstrati P2P, ma anche come piattaforma sulla quale sviluppare nuove applicazioni. In seguito è stata ampliata per fornire un robusta e sicura implementazione che fosse utilizzabile su larga scala in Internet. Fornisce inoltre l’implementazione dell’applicazione Scribe.

Analizziamo gli elementi fondementali del DHTBundle:

Il file MANIFEST.MF E’ il file fondamentale per la configurazione del bundle per l’ambiente OSGI. In esso sono infatti contenute le impostazioni del bundle a cui il framework OSGI che lo ospita farà riferimento per ottenere le informazioni necessarie alla gestione del bundle. In particolare esso contiene: versione, dipen-denze, package esportati o importati, posizione dell’Activator file e delle librerie interne utilizzate oltre a elementi informativi più generici come il nome simbolico del bundle.

Manifest-Version: 1.0

Export-Package: context.dht.interfaces

Bundle-ClassPath: .,resources/FreePastry-2.1.jar,resources/xpp3-1.1.4c.jar Bundle-Name: DHT

Ant-Version: Apache Ant 1.8.0 Bundle-Version: 1.0.0

Bundle-Activator: context.dht.activator.DHTActivator Bundle-ManifestVersion: 2

Bundle-SymbolicName: DHT

Import-Package: org.osgi.framework, org.apache.ws.muse.test.wsrf

Focalizziamoci sugli elementi più importanti:

> Export-Packages dichiara ciò che il bundle vuole rendere accessibile, come servizio, della sua implementazione, nel nostro caso indichiamo che vo-gliamo esportare i package context.dht.interfaces contenente l’interfaccia IDHT. In questo modo un altro bundle può richiamare il servizio ed uti-lizzare i metodi, operazioni dichiarate nell’interfaccia. Questa è la tecnica attraverso la quale, in OSGI, vengono resi accessibili i servizi. Per fare questo si fa uso del servizio fornito dal bundle REGISTER incluso nel fra-mework OSGI. L’operazione di registrazione del servizio è implementata nell’Activator del DHTBundle.

> Import-Packages dichiara i package degli altri bundle di cui farà uso il DHT-Bundle, di default dobbiamo indicare il package del framework org.osgi.framework e nel nostro caso anche il package org.apache.ws.muse.test.wsrf che è

re-lativo al PRODUCERBundle e contiene l’interfaccia dei servizi che questo mette a disposizione.

> Bundle-ClassPath indica il percorso e il nome delle librerie di cui fa uso il bundle.

> Bundle-Activator indica il percorso e il nome dell’Activator file del bundle

La classe DHTActivator

L’activator file deve implementare la classe BundleActivator che ha due me-todi start(BundleContext context) e stop(BundleContext context). Il metodo start(BundleContext context) viene chiamato ogni volta che il bundle viene av-viato mentre il metodo stop(BundleContext context) è richiamato ogni volta che il bundle viene fermato. Nel nostro caso nel metodo start(BundleContext context) compiamo le seguenti operazioni:

• leggiamo i parametri per la rete pastry (IP, bindPort, bootPort) contenuti nel file PastryPortConf.conf

• istanziamo la nostra PastryDHT

• registriamo l’intefaccia IDHT con i servizi offerti agli altri bundles.

L’interfaccia IDHT In OSGI quando un bundle vuole rendere accessibili alcune funzioni esternamente, offrire servizi, deve: implementare un’interfaccia con le funzioni che esporta,fare un’implementazione dell’interfaccia, dichiarare nel fi-le manifest, nell’etichetta Export-Packages, il package contenente l’interfaccia, registrare il servizio nel REGISTER bundle del framework . Per il DHTBundle

Figura 4.10: il DHTBundle esporta i suoi servizi attraverso il REGISTER Bundle l’interfaccia è implementata in questa classe. Le operazion di interesse per la nostra implementazione sono:

> public void publish(String topic,String payload,int priority);: consente pub-blicare una notifica sul Topic topic, una priorità pari a priority e un carico utile uguale a payload nella rete SCRIBE. Il DHTBundle è predisposto per gestire la priorità delle notifiche ma non è al momento implementata > subscribe(String topic): consente di sottoscriversi al rendez-vous node della

rete SCRIBE per il Topic topic.

La classe PastryDHT Implementa la logica dell’interfaccia IDHT e in fase di inizializzazione si unisce o crea, usando i parametri di rete il pastry ring attraverso le classi fornite dalla libreria FreePastry,istanzia il client scribe, MyScribeClient e le classi satellite di cui questo ha bisogno.

La classe MyScribeClient Questa classe gestisce le funzioni che attivano la logica dell’applicazione SCRIBE. Fa uso delle classi della libreria FreePastry la quale fornisce un’implementazione di SCRIBE. In particolare MyScribeClient im-plementa l’interfaccia ScribeClient di FreePastry che consente di gestire il com-portamento dell’applicazione scribe a fronte di scribe events. Un altro elemento

da considerare è l’oggetto myScribe istanza della classe ScribeImpl di FreePastry, esso rappresenta l’istanza di un nodo Scribe e fornisce la logica vera e propria del-l’applicazione SCRIBE. Sostanzialmente la classe MyScribeClient implementando l’interfaccia ScribeClient diventa un client attraverso il quale gestire l’applicazione scribe implementata nella classe ScribeImpl. Un ultimo elemento da evidenziare è il fatto che il DHTBundle dovendo interagire con il PRODUCERBundle, ottie-ne un riferimento all’endpoint reference di quest’ultimo e quindi accesso ai suoi servizi, interrogando il REGISTER Bundle attraverso un service listener.

Figura 4.11: il DHTBundle usa i servizi del PRODUCERBundle ricercandoli attraverso il REGISTER Bundle

La classe MyScribeContent Rappresenta l’implementazione di un messag-gio scribe. Esso trasporta come payload: la priorità della notifica, il topic di appartenenza, il payload nella notifica.

Documenti correlati