Uno scorcio sul mondo OSGi e OSGi enterprise: modularita' e dinamismo

Documenti analoghi
Application Server per sviluppare applicazioni Java Enterprise

Panoramica: che cosa è necessario

Eclipse e Subversion

Breve introduzione curata da Alessandro Benedetti. Struts2-Introduzione e breve guida

Il web server Apache Lezione n. 3. Introduzione

Approccio stratificato

Tale attività non è descritta in questa dispensa

Applicazioni web. Sommario. Parte 6 Servlet Java. Applicazioni web - Servlet. Alberto Ferrari 1. Servlet Introduzione alle API ed esempi

Ambienti di Sviluppo

MetaMAG METAMAG 1 IL PRODOTTO

Mac Application Manager 1.3 (SOLO PER TIGER)

IBM Software Demos The Front-End to SOA

Implementazione di MVC. Gabriele Pellegrinetti

B.P.S. Business Process Server ALLEGATO C10

App-V Dynamic Suite Composition

Acronis License Server. Manuale utente

Informatica. Prof. A. Longheu. Introduzione a Java

Corso Eclipse. Prerequisiti. 1 Introduzione

Sistemi informativi secondo prospettive combinate

Il CMS Moka. Giovanni Ciardi Regione Emilia Romagna

Programmazione server-side: Java Servlet

Aggiornare applicazioni virtualizzate con App-V

Implementing a new ADT based on the HL7 version 3 RIM. Esempio

Presentazione di Cedac Software

Software per Helpdesk

Tecniche di progettazione e sviluppo di applicazioni mobile

Nota Tecnica UBIQUITY 5 TN0019. Il documento descrive le novità introdotte con la versione 5 della piattaforma software ASEM Ubiquity.

Generazione Automatica di Asserzioni da Modelli di Specifica

Progettaz. e sviluppo Data Base

The Enterprise Service BUS. Manuale utente - VulCon

Licenza per sito Manuale dell amministratore

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

Architetture Applicative

Sistemi avanzati di gestione dei Sistemi Informativi

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1)

Prova Finale a.a. 2011/2012. Laboratorio 1: Introduzione a Java e Eclipse

SPSS Statistics per Windows - Istruzioni di installazione per (Licenza per utenti singoli)

SAP BusinessObjects Versione del documento: Manuale di installazione di Dashboards LiveCycle Data Services Gateway

IBM SPSS Statistics - Essentials for R - Istruzioni diinstallazione per Mac OS

Lezione 9. Applicazioni tradizionali

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

Programmare in ambiente Java Enterprise: l offerta formativa di Infodue

Test di unità con JUnit4

Istruzioni per l installazione

Concetti di base di ingegneria del software

Configuration Management

Registratori di Cassa

Concetto di Funzione e Procedura METODI in Java

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Visual basic base Lezione 01. L'ambiente di sviluppo

Fiery Driver Configurator

8.A.8 Orchestratore Locale. ESB Piano dei test

Programmazione ad Oggetti. Java Parte I

IBM SPSS Statistics - Essentials for R- Istruzioni di installazione per Mac OS

MDaemon GroupWare Per offrire agli utenti le funzionalità di condivisione calendario, rubrica e gli altri oggetti di OutLook

Strumenti per la programmazione

Gestione della memoria centrale

Il Linux che verrà... Francesco Crippa

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Capitolo 13. Interrogare una base di dati

Addition X DataNet S.r.l.

IBM SPSS Statistics per Windows - Istruzioni di installazione (Licenza per utenti singoli)

Candidato: Luca Russo Docente: Prof. Raffaele Montella. 27 Marzo 2013

Mon Ami 3000 Varianti articolo Gestione di varianti articoli

JUMP THE UNIFIED MAPPING PLATFORM

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

Appendice III. Competenza e definizione della competenza

WNoD: Virtualizzazione, Grid e Cloud nel Calcolo Scientifico per l INFN

J2EE (o JEE): Framework Java per lo sviluppo di applicazioni WEB Enterprise, che vivono in rete e che siano accessibili attraverso browser.

BDX 3D-EDITOR (autore: Marco Bedulli) Scopo del software. Caratteristiche fondamentali. Linguaggi utilizzati. Navigazione 3D

Overview su Online Certificate Status Protocol (OCSP)

IBM SPSS Statistics per Linux - Istruzioni di installazione (Licenza per sito)

DW-SmartCluster (ver. 2.1) Architettura e funzionamento

Online Help StruxureWare Data Center Expert

Modulo 4: Ereditarietà, interfacce e clonazione

Progetto Virtualizzazione

Progettaz. e sviluppo Data Base

INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014)

Costruire il futuro il valore delle scelte tecnologiche

IBM SPSS Statistics - Essentials for Python- Istruzioni di installazione per Windows

PAWSN. Wireless social networking

Capitolo 4 Pianificazione e Sviluppo di Web Part

Joomla! 2.5:Utenti e permessi - Il wiki di Joomla.it

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Finalità della soluzione Schema generale e modalità d integrazione Gestione centralizzata in TeamPortal... 6

Zoo 5. Robert McNeel & Associates Seattle Barcelona Miami Seoul Taipei Tokyo

IBM SPSS Statistics per Mac OS - Istruzioni di installazione (Licenza per sito)

Introduzione alla Progettazione per Componenti

ALLEGATO 8.1 DESCRIZIONE PROFILI PROFESSIONALI

Prova Finale Controllo delle versioni

Pacchettizzazione e distribuzione del software

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

Moka Web La nuova architettura Moka

1) GESTIONE DELLE POSTAZIONI REMOTE

E possibile modificare la lingua dei testi dell interfaccia utente, se in inglese o in italiano, dal menu [Tools

L o. Walter Ambu japs: una soluzione agile (

Manuale di Aggiornamento BOLLETTINO. Rel H4. DATALOG Soluzioni Integrate a 32 Bit

IBM Software Demos WebSphere Portal Composite Application Workflow

lem logic enterprise manager

Transcript:

Uno scorcio sul mondo OSGi e OSGi enterprise: modularita' e dinamismo Giacomo Pallotti giacomo.pallotti@gmail.com

abstract... Modularità e Dinamismo Modularità e Dinamismo in Java e JEE Diario di un bravo sviluppatore JEE Cosa è OSGI OSGI Alliance Layer Specifiche OSGi Alliance Eclipse ed il framework OSGi Container osgi e osgi enterprise open source Casi d'esempio bundle service provider service client web app (servlet) LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 2

Modularità E' la scomposizione logica di un sistema in un insieme di sottosistemi più piccoli che collaborano tra di loro. A1 A A2 A' A3 LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 3

Dinamismo E' la capacità di variare un sistema in maniera indipendente senza coinvolgere (e stravolgere...) tutte le altre parti del sistema. A B D D' D C LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 4

Modularità in Java ll linguaggio Java non è nato con lo scopo di supportare una programmazione modulare; il suo più grande pregio, oltre al Write Once Run Anywhere (o Everywhere), è la capacità di costruire applicazioni di tutti i tipi, da embedded a mobile, da rich client a enterprise. Quindi il criticare Java per una caratterista che non faceva parte delle sue specifiche sarebbe quanto meno non giusto. Java ha introdotto i concetti di package e visibilità (public, protected, private) in relazione all' encapsulation (incapsulamento), cioè la possibilità di impacchettare in una singola entità i dati e le azioni che sono riconducibili ad un singolo componente. Il fine NON era quello del partizionamento logico di un sistema, ma di una organizzazione finalizzata al singolo componente LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 5

La divisione delle classi in package, e la visibilità dei metodi e delle variabili delle classi all'interno dello stesso package oppure da package diversi, obbligano a definire spesso public o al massimo protected (se le classi sono in gerarchia) tali metodi. In pratica la scelta di uno sviluppatore è: 1 - mandare a quel paese la struttura logica della propria applicazione accorpando nello stesso package classi che non sono in relazione tra di loro, per evitare di esporre metodi non public. 2 Mantenere la struttura logica utilizzando però package multipli con il costo di esporre metodi public che possono essere acceduti anche dalle classi degli altri package LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 6

Dinamismo in Java Un'applicazione Java (sia una stand alone application, sia una webapp più o meno complessa) è composte da componenti interni (classi, risorse varie, file di configurazioni,...) e da liberie (jar) esterne. Queste librerie verosimilmente hanno una versione e certe dipendenze da altre librerie. La VM e il class loader non supportano la possibilità di avere versioni diverse di uno stesso jar viene caricato il primo che viene trovato nel claspath. Classpath Compile Time vs Runtime LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 7

Diario di un bravo JEE developer C'era una volta un bravo sviluppatore java enterprise. Ha sviluppato una web application sul suo workspace, ha fatto le prove sull' application test server sulla sua macchina, e si appresta a deployare la sua applicazione sul server ufficiale di test. Che sia Tomcat o Websphere. Installa la sua webapp, configura tutto per benino, avvia il server e alla prima chiamata alla sua jsp LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 8

NoSuchMethodError LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 9

cavolo, vuoi vedere che ho messo nelle lib del war i jar sbagliati? Opps, non è possibile, ho copiato solo il war, le lib sono quelle che già c'erano quindi forse le lib vecchie non sono uguali a quelle nuove... (Tomcat) I jar non sono dentro al WAR/EAR, utilizzo una shared lib sul server che punta ad una cartella condivisa da altri applicazioni... (Webshpere) in tutti i modi le libreria che il nostro JEE developer ha sul server non ha il metodo che le classi si aspettano. Il jar incriminato è la libreria pippolib Sul suo workspace uso la versione 1.4.19 Il file si chiama: pippolib.jar LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 10

E sul server che versione c'è? come si chiamerà il file?! pippolib.jar perfetto :( Almeno hanno data e dimensione diverse LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 11

quindi?! 1. decide di mettere tutte le lib all'interno del suo ear/war, per essere sicuri di avere la versione giusta Avrà le librerie comuni replicate dentro ogni applicazione LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 12

2. Cerca di ricordarsi di rinominare le librerie aggiungendo al nome del file il suffisso v_x_x_x.jar per riuscire a capire che versione è 3. Crea cartelle di shared lib personalizzate con le versioni di librerie common dentro, e le fa puntare come shared lib in più server (es. Websphere), così da avere più versioni delle stesse lib in cartelle diverse Nessuna di queste soluzioni è standardizzata, soprattutto se il nostro bravo developer non lavora da solo LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 13

non esiste l'aggiornamento a caldo delle lib il class loader carica la prima che trova si avranno librerie uguali replicate Modularità e dinamismo?! LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 14

OSGi Alliance Acronimo di Open Service Gateway Initiative, è un consorzio fondato nel 1999 da Oracle, Ericsson, Ibm ed altre aziende, il cui obiettivo è quello di creare un framework che implementi un modello a componenti completo e dinamico. Con il tempo altre aziende si sono aggiunte al progetto LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 15

Cosa è OSGi?! OSGi è uno strato modulare per la piattaforma Java Il framework OSGi è un sistema modulare ed una piattaforma di servizio per Java che implementa un modello a componenti completo e dinamico. Applicazioni o componenti (bundle) possono essere installate, avviate, arrestate, aggiornate e disinstallate senza richiedere un riavvio. Le specifiche OSGi sono andate oltre l'obiettivo originario che avevano, cioè di gateway di servizi (portale di servizi) sono ora utilizzate in applicazioni per ambienti diversi (mobile, embedded, rcp, enterprise). La gestione dei package Java che i componenti utilizzano è gestita e implementata dettagliatamente. La gestione del ciclo di vita dei moduli stessi utilizza API che ne permettono la gestione remota. Il Service Registry permette ai bundle di rilevare l'aggiunta di nuovi servizi, o l'eliminazione dei servizi, e adeguarsi di conseguenza. LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 16

Concetti fondamentali Dunque l'idea dell'osgi Alliance è la implementazione di un framework che sia... modulare: per la piattaforma Java e JEE dinamico: consenta la distribuzione, l'avvio, lo stop e la rimozione dei bundles a runtime, senza dover riavviare il container OSGi orientato ai servizi: che possano essere dinamicamente registrati ed utilizzati. Introduzione e definizione del concetto di bundle (modulo) Gestione automatica delle dipendenze Gestione del ciclo di vita del codice (configurazione e distribuzione dinamica). LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 17

Qualsiasi applicazione che è stato progettata in maniera modulare può trarre beneficio dalle specifiche e dal framework OSGi: si potranno avviare, arrestare, aggiornare i singoli moduli con un impatto minimo sugli altri. Riduzione della complessità: sviluppare con la tecnologia OSGi significa sviluppare bundle, che sono semplici Jar. Riutilizzo, Distribuzione, aggiornamenti dinamici (senza riavviare il container) Versioning: la tecnologia OSGi risolve l'inferno delle librerie JAR. Nell'ambiente OSGi, tutti i package sono accuratamente versionati e soltanto i bundles che sono dipendenti sono collegati tra loro. Semplice: Il nucleo API è solo un pacchetto e meno di 30 classi/interfacce Veloce e Lazy (Pigro): L'essere Lazy è una qualità vincente nell'ambito del software e la tecnologia OSGi ha molti meccanismi per fare le cose solo quando sono realmente necessarie La flessibilità delle specifiche OSGi è dimostrato da come si può persino eseguire all'interno di un Application Server J2EE Versioni multiple: Le applicazioni possono avere più di una versione di un particolare bundle in esecuzione al momento stesso LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 18

Layers LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 19

OSGi Module (o Bundle) layer Definisce il concetto di moduli o bundle, che sono semplici file JAR con informazioni aggiuntive (metadata) nel file MANIFEST.MF. Un bundle contiene le classi e le risorse aggiuntive per quel modulo. Concettualmente un bundle non è un intera applicazione impachettata in un jar, ma è un modulo di una applicazione, che assieme agli altri bundles si combina per formare l'applicazione stessa. Un bundle, con i suoi metadata, estende il concetto di access modifiers che ha java, introducendo informazioni come ad esempio quali packages di quel modulo devono essere visibili all'esterno, oppure quali altri moduli o package di altri moduli sono indispensabili per quel dato bundle (imported e exported packages). Il framework OSGi in questo modo può gestire e verificare la consistenza dei bundle automaticamente. LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 20

OSGi Lifecycle layer Definisce come i bundle sono dinamicamente installati e gestiti dal framework OSGi. esternamente all'applicazione definisce come avvengono le operazioni di install, update, start, stop e uninstall per amministrare dinamicamente i bundle internamente all'applicazione fornisce un modo per interagire con il framework OSGi e i servizi che esso fornisce durante l'esecuzione LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 21

OSGi Service Layer Supporta un approccio alla programmazione flessibile e orientato ai servizi (concetto presente nel framework OSGi prima che le architetture SOA diventassero popolari...). I service providers (che sono sempre bundle...) pubblicano i loro servizi su un service registry, e i service client (bundles...) utilizzano il registry per ricercare servizi da utilizzarli bind interaction pattern. Promuove uno sviluppo centrato sulla separazione tra interfaccia e implementazioni i servizi OSGi sono semplicemente delle interfacce Java che rappresentano un contratto tra service provider e service client. Gli OSGi service, che sono bundle, possono dunque dinamicamente essere avviati o stoppati. LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 22

approccio OSGi allo sviluppo... 1. Progettare l'applicazione dividendola in interfacce che espongono un servizio e client che lo usano (approccio interface-based) 2. Implementare i service provider e i client component utilizzando i tools che normalmente si usano 3. Impacchettare le i service provider e i client in JAR separati. 4. Aggiungere ad ogni JAR l'appropriato OSGi metadata. 6. Avviare l' OSGi framework. 7. Installare e avviare tutti i propri bundle. LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 23

Specifiche OSGi - OSGi Service Platform R4 Version 4.0 October 2005 - OSGi Service Platform R4 Version 4.1 May 2007 - OSGi Service Platform R4 Version 4.2 March 2010: OSGi Service Platform Release 4 Version 4.2 Core Specification OSGi Service Platform Release 4 Version 4.2 Compendium Specification OSGi Service Platform Release 4 Version 4.2 Enterprise Specification OSGi Service Platform Release 4 Version 4.2 Core Companion Code OSGi Service Platform Release 4 Version 4.2 Compendium Companion Code OSGi Service Platform Release 4 Version 4.2 Enterprise Companion Code OSGi Service Platform Release 4 Version 4.2 Minimum Execution Environment OSGi Service Platform Release 4 Version 4.2 Foundation Execution Environment LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 24

JaxLondon and OSGi DevCon 2010 LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 25

OSGI manifest.mf Bundle-Activator Questa classe viene utilizzata per avviare e stoppare il bundle. Bundle-ClassPath Questa proprietà specifica il CLASSPATH da utilizzare per il bundle. La struttura può contenere riferimenti a directory o file jar all'interno del bundle. Bundle-Version Specifica il numero di versione del bundle. Package imports e required bundle possono includere anche l'informazione sulla versione del package o del bundle. Export-Package Questa proprietà specifica tutti i package da esporre pubblicamente ad altri plug-in. Import-Package Specifica tutti i package necessari da importare in modo esplicito dal bundle. Require-Bundle Questa proprietà specifica quali bundle e quali loro exported package siano da importare per essere utilizzati nel bundle. LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 26

LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 27

Container OSGi open source Equinox è un progetto di Eclipse che implementa le specifiche OSGi core framework release 4. E' un runtime modulare che consente di deployare e avviare un'applicazione organizzata come una serie di bundle utilizzando i servizi e l'infrastruttura comune Dalla versione 3.0 di Eclipse, Equinox è diventato il runtime per i plugin che è appunto utilizzato da Eclipse stesso, ed è oggi la reference implementation delle specifiche del framework OSGi. Altri container utilizzati sono Knoplerfish e Apache Felix, sviluppato dall'apache Foundation. LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 28

Eclipse ed il framework OSGi Eclipse utilizza OSGI come base per il suo sistema di plug-in dalla versione 3.0 Le prime versioni di Eclipse erano state concepite come un insieme di plug-in. Tuttavia, poiché i requisiti sono cresciuti, è diventato necessaria una gestione dei plugin più robusta ed efficace. Tra i requisiti di base di questo nuovo sistema si voleva avere la possibilità di gestire dinamicamente l'aggiunta di nuovi plug-in e l'arresto plug-in esistenti. Dopo ampie ricerche, gli sviluppatori Eclipse hanno optato per utilizzare le specifiche del framework OSGi per realizzarlo. Eclipse fornisce una delle implementazioni possibili di questa specifica ed è l'implementazione di riferimento delle specifiche OSGi R4. LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 29

Nelle versioni precedenti alla 3.0, le dipendenze dei plug-in, le extensions e gli extension points erano definiti nei file plugin.xml di ogni plugin. Con l'introduzione delle specifiche OSGi, le informazioni sulle dipendendenze sono state spostate nel file manifest.mf, lasciando nel plugin.xml solo le definizioni di extensions ed extension points. Il progetto Eclipse è stato sviluppato interamente sul framework Equinox ed è quindi un esempio completo di sviluppo "a bundle", modulare, a componenti e a servizi. Un nuovo progetto plugin non è che un bundle nell accezione OSGi, e i plugin di Eclipse non sono altro che bundle e seguono tutti gli standard e le caratteristiche degli stessi. LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 30

Equinox si propone come il framework di riferimento in quanto supporta un progetto delle dimensioni di Eclipse. È infatti grazie a questa tecnologia che diventa semplice sviluppare estensioni di Eclipse, agganciandosi alle funzionalità già offerte dall IDE in modo da personalizzarne il comportamento. Lanciando Eclipse con -console si avvia la console OSGi dei bundle in parallelo all'ide dalla quale sarà possibile amministrare i bundle disponibili nella distribuzione. Il jar che racchiude il core del framework è: org.eclipse.osgi.[versione].jar. LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 31

Container OSGi enterprise Negli ultimi anni molti vendor si sono affacciati sul mondo OSGI enterprise (IBM, Oralcle, Progress, Sap, VMWare, ) e attualmente supportano la OSGi Alliance attivamente. Parallelamente molti progetti Enterprise Open Source con le comunità Eclipse e Apache sono nati Tutto questo fermento non ha fatto altro che aumentare il numero di sviluppatori che hanno utilizzato e hanno sperimentano le nuove specifiche/features, e con l'introduzione dalle specifiche 4.2 l'attività della comunity è notevolmente aumentata. Attualmente la parte OSGi che si occupa di enterprise è l' OSGI Enterprise Expert Group (OSGi EEG) Accanto ai progetti di open source di osgi container, sono nati altri progetti come: Apache Aries: implementazione del Blueprint Container, che estende specifiche definite dalla OSGI Enterprise Expert Group incluso: convertitore bundle WAR; integrazione per JPA, JTA, JMX, (IBM Websphere 7 lo utilizza) Eclipse Gemini LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 32

LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 33

Blueprint Container È una specifica OSGI EEG 4.2 Introduce il concetto di dependency injection framework for OSGI Si utilizzano semplici Java object (POJOs), che possono essere utilizzati sia all'interno del framework OSGi che esternamente, ed un file blueprint.xml E' basato su Spiring DM Dynamic Model framework I produttori di OSGi container (es Apache Aries che IBM con WebSphere7 utilizza) si stanno orientando verso questo tipo di approccio LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 34

Casi d'esempio (Eclipse Helios 3.6 SR1 + Equinox) Bundle osgi jar helloworld Bundle service provider gettime: servizio interfaccia/implementaizone OSGi che restituisce il time Bundle client gettime: client del servizio gettime Bundle webapp helloservlet: WebApp con una servlet Bundle webapp client gettime: WebApp con servlet e chiamata al servizio LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 35

manifest.mf LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 36

osgi service provider Activator LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 37

osgi service client Activator LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 38

osgi servlet vs WAR E' una semplice classe che estende HttpServlet. La differenza con una web application implementata come WAR, è che la servlet è impacchettata in un package di un bundle osgi, e il jar è deployato sull'osgi framework come un semplice bundle appunto. La servlet è registrata nel container osgi (dato che non abbiamo un web container) tramite extension point di org.eclipse.equinox.http.registry.servlets Nelle opzioni di lancio del osgi framework, vanno aggiunti tutti i bundle che servono: com.example.servlet javax.servlet org.eclipse.equinox.common org.eclipse.equinox.http org.eclipse.equinox.http.registry org.eclilpse.equinox.registry org.eclipse.osgi org.eclipse.osgi.services Nei program arguments -console nei VM args -Dorg.osgi.service.http.port=8080 LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 39

osgi servlet con Jetty Jetty è un http server ed un servlet container basato su java. Jetty è open source rilasciato con licenza Apache 2.0. Si può scegliere di utilizzare un container più robusto, come Jetty ad esempio, che è compatibile con le specifiche Servlet 2.4 nella versione 7 e con quelle 3.0 per la versione Jetty 8, utilizzando questi bundle: org.eclipse.equinox.http.jetty org.eclipse.equinox.http.servlet org.mortbay.jetty.server org.mortbay.jetty.util al posto di: org.eclipse.equinox.http LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 40

osgi framework console LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 41

Webliography... http://www.osgi.org/main/homepage http://jaxlondon.com/2010/osgidevcon http://www.ibm.com/developerworks/opensource/library/os-osgiblueprint/index.html http://www.eclipse.org/equinox/ http://jetty.codehaus.org/jetty/ http://felix.apache.org/site/index.html http://incubator.apache.org/aries/ LinuxDay 2010 Giacomo Pallotti - OSGI e OSGI Enterprise 42