quali vantaggi offre il sistema di componenti OSGi?
Bene, ecco un bel elenco:
Complessità ridotta - Sviluppare con la tecnologia OSGi significa sviluppare bundle: i componenti OSGi. I pacchetti sono moduli. Nascondono i loro interni da altri gruppi e comunicano attraverso servizi ben definiti. Nascondere gli interni significa più libertà di cambiare in seguito. Ciò non solo riduce il numero di bug, ma semplifica anche lo sviluppo di bundle perché bundle di dimensioni corrette implementano una funzionalità attraverso interfacce ben definite. C'è un blog interessante che descrive cosa ha fatto la tecnologia OSGi per il suo processo di sviluppo.
Riutilizzo: il modello dei componenti OSGi semplifica l'utilizzo di numerosi componenti di terze parti in un'applicazione. Un numero crescente di progetti open source fornisce i propri JAR pronti per OSGi. Tuttavia, le librerie commerciali stanno diventando disponibili anche come pacchetti già pronti.
Mondo reale -Il framework OSGi è dinamico. Può aggiornare i bundle al volo e i servizi possono andare e venire. Gli sviluppatori abituati a Java più tradizionali vedono questa come una caratteristica molto problematica e non vedono il vantaggio. Tuttavia, si scopre che il mondo reale è altamente dinamico e con servizi dinamici che possono andare e venire, i servizi si abbinano perfettamente a molti scenari del mondo reale. Ad esempio, un servizio potrebbe modellare un dispositivo nella rete. Se viene rilevato il dispositivo, il servizio è registrato. Se il dispositivo scompare, il servizio non è registrato. Ci sono un numero sorprendente di scenari del mondo reale che corrispondono a questo modello di servizio dinamico. Le applicazioni possono quindi riutilizzare le potenti primitive del registro dei servizi (registrarsi, ottenere, elencare con un linguaggio di filtro espressivo e attendere che i servizi appaiano e scompaiano) nel proprio dominio. Ciò non solo consente di risparmiare la scrittura del codice, ma fornisce anche visibilità globale, strumenti di debug e più funzionalità di quelle che sarebbero state implementate per una soluzione dedicata. Scrivere codice in un ambiente così dinamico sembra un incubo, ma fortunatamente ci sono classi di supporto e framework che eliminano la maggior parte, se non tutta, del dolore.
Facile implementazione - La tecnologia OSGi non è solo uno standard per i componenti. Specifica inoltre come vengono installati e gestiti i componenti. Questa API è stata utilizzata da molti bundle per fornire un agente di gestione. Questo agente di gestione può essere semplice come una shell dei comandi, un driver di protocollo di gestione TR-69, un driver di protocollo OMA DM, un'interfaccia di cloud computing per EC2 di Amazon o un sistema di gestione IBM Tivoli. L'API di gestione standardizzata semplifica l'integrazione della tecnologia OSGi nei sistemi esistenti e futuri.
Aggiornamenti dinamici : il modello di componente OSGi è un modello dinamico. I pacchetti possono essere installati, avviati, arrestati, aggiornati e disinstallati senza arrestare l'intero sistema. Molti sviluppatori Java non credono che ciò possa essere fatto in modo affidabile e quindi inizialmente non lo usano nella produzione. Tuttavia, dopo averlo usato nello sviluppo per un po 'di tempo, la maggior parte inizia a capire che funziona davvero e riduce significativamente i tempi di implementazione.
Adattivo: il modello di componente OSGi è progettato da zero per consentire la miscelazione e l'abbinamento dei componenti. Ciò richiede che le dipendenze dei componenti debbano essere specificate e che i componenti vivano in un ambiente in cui le loro dipendenze opzionali non sono sempre disponibili. Il registro dei servizi OSGi è un registro dinamico in cui i bundle possono registrare, ottenere e ascoltare i servizi. Questo modello di servizio dinamico consente ai bundle di scoprire quali funzionalità sono disponibili sul sistema e di adattare la funzionalità che possono fornire. Questo rende il codice più flessibile e resistente alle modifiche.
Trasparenza: pacchetti e servizi sono cittadini di prima classe nell'ambiente OSGi. L'API di gestione fornisce l'accesso allo stato interno di un pacchetto e al modo in cui è collegato ad altri pacchetti. Ad esempio, la maggior parte dei framework fornisce una shell dei comandi che mostra questo stato interno. Alcune parti delle applicazioni possono essere arrestate per eseguire il debug di un determinato problema, oppure possono essere inseriti bundle diagnostici. Invece di fissare milioni di righe di output di registrazione e lunghi tempi di riavvio, le applicazioni OSGi possono spesso essere sottoposte a debug con una shell dei comandi live.
Controllo delle versioni: la tecnologia OSGi risolve l'inferno JAR. JAR inferno è il problema che la libreria A funziona con la libreria B; versione = 2, ma la libreria C può funzionare solo con B; versione = 3. In Java standard, sei sfortunato. Nell'ambiente OSGi, tutti i bundle sono attentamente controllati e solo i bundle che possono collaborare sono collegati nello stesso spazio di classe. Ciò consente a entrambi i bundle A e C di funzionare con la propria libreria. Sebbene non sia consigliabile progettare sistemi con questo problema di versione, in alcuni casi può essere un salvavita.
Semplice: l'API OSGi è sorprendentemente semplice. L'API principale è solo un pacchetto e meno di 30 classi / interfacce. Questa API principale è sufficiente per scrivere bundle, installarli, avviarli, arrestarli, aggiornarli e disinstallarli e include tutti i listener e le classi di sicurezza. Esistono pochissime API che offrono così tante funzionalità per così poche API.
Piccolo: OSGi Release 4 Framework può essere implementato in un file JAR di circa 300 KB. Questo è un piccolo sovraccarico per la quantità di funzionalità che viene aggiunta a un'applicazione includendo OSGi. OSGi funziona quindi su una vasta gamma di dispositivi: da molto piccoli, a piccoli, ai mainframe. Richiede solo l'esecuzione di una VM Java minima e aggiunge molto poco.
Veloce : una delle responsabilità principali del framework OSGi è il caricamento delle classi dai bundle. Nella Java tradizionale, i JAR sono completamente visibili e inseriti in un elenco lineare. La ricerca di una classe richiede la ricerca in questo elenco (spesso molto lungo, 150 non è insolito). Al contrario, OSGi precabla i bundle e conosce esattamente per ciascun bundle quale bundle fornisce la classe. Questa mancanza di ricerca è un fattore di accelerazione significativo all'avvio.
Lazy - Lazy in software è buono e la tecnologia OSGi ha molti meccanismi in atto per fare le cose solo quando sono realmente necessarie. Ad esempio, i bundle possono essere avviati con entusiasmo, ma possono anche essere configurati per avviarsi solo quando altri bundle li utilizzano. I servizi possono essere registrati, ma creati solo quando vengono utilizzati. Le specifiche sono state ottimizzate più volte per consentire questo tipo di scenari pigri che possono far risparmiare enormi costi di runtime.
Sicuro: Java ha un potente modello di sicurezza a grana fine nella parte inferiore, ma in pratica si è rivelato molto difficile da configurare. Il risultato è che la maggior parte delle applicazioni Java sicure sono in esecuzione con una scelta binaria: nessuna sicurezza o funzionalità molto limitate. Il modello di sicurezza OSGi sfrutta il modello di sicurezza a grana fine ma migliora l'usabilità (oltre a rafforzare il modello originale) facendo in modo che lo sviluppatore del bundle specifichi i dettagli di sicurezza richiesti in una forma facilmente verificabile mentre l'operatore dell'ambiente rimane pienamente responsabile. Nel complesso, OSGi fornisce probabilmente uno degli ambienti applicativi più sicuri che è ancora utilizzabile a corto di piattaforme informatiche protette dall'hardware.
Non intrusivo: le applicazioni (bundle) in un ambiente OSGi sono lasciate a se stesse. Possono utilizzare praticamente qualsiasi struttura della VM senza che OSGi le limiti. La migliore pratica in OSGi è scrivere oggetti Java vecchi semplici e per questo motivo non è necessaria un'interfaccia speciale per i servizi OSGi, anche un oggetto String Java può fungere da servizio OSGi. Questa strategia semplifica il porting del codice dell'applicazione in un altro ambiente.
Corre ovunque - Beh, dipende. L'obiettivo originale di Java era correre ovunque. Ovviamente, non è possibile eseguire tutto il codice ovunque perché le capacità delle VM Java sono diverse. Una VM in un telefono cellulare probabilmente non supporterà le stesse librerie di un mainframe IBM che esegue un'applicazione bancaria. Ci sono due problemi da affrontare. Innanzitutto, le API OSGi non devono utilizzare classi che non sono disponibili in tutti gli ambienti. In secondo luogo, un pacchetto non dovrebbe iniziare se contiene codice che non è disponibile nell'ambiente di esecuzione. Entrambi questi problemi sono stati risolti nelle specifiche OSGi.
Fonte: www.osgi.org/Technology/WhyOSGi