2011-02-07 3 views
12

Sto sviluppando un'applicazione di ricerca basata su semantica in java. Per rendere l'applicazione modulare, ho pensato di utilizzare l'architettura di osgi. Ma dal momento che sono nuovo di osgi, non ho idea dei pro e contro di usarlo. Qualcuno può spiegare vantaggi/svantaggi dell'utilizzo di osgi e quale tipo di applicazione sarà avvantaggiata dall'uso di osgi/cosa otterrà l'applicazione in questo modo ??utilizzando osgi per sviluppare un'applicazione

Grazie !!

risposta

23

In poche parole OSGi è uno standard utilizzato per creare applicazioni modulari. Aggiunge un nuovo livello di modularità: bundle (ovvero componenti, moduli). Ogni bundle contiene classi e interfacce e quello che è il più importante si deve esplicitamente indicare:

  • che altri componenti o pacchetti Java utilizza,
  • e quali pacchetti vuole esporre a essere utilizzato da altri componenti.

Dal punto di vista tecnico fasci sono file jar che hanno un po 'esteso META-INF/MANIFEST.MF file. Tutte le informazioni di cui sopra sono memorizzate nel file MANIFEST.MF.

Dal punto di vista pratico questo esplicito presentatore presenta vantaggi e svantaggi. Per me il più grande vantaggio è che sei costretto a pensare alla tua architettura, ai moduli e all'interazione tra loro più che nelle applicazioni standard. Questo può creare una migliore architettura in cui ogni modulo è responsabile di compiti ben definiti e moduli possono essere riutilizzati. Se si tratta di svantaggi, la creazione di molti moduli può essere talvolta dolorosa. È abbastanza facile avere molti moduli e se ne hai davvero molti potrebbe essere difficile mantenere tutte le dipendenze tra i moduli (i cicli di dipendenza sono piuttosto dolorosi).

OSGi non è solo uno standard di sole applicazioni modulari. Specifica anche l'ambiente in cui i bundle esistono e vengono eseguiti. Questo è qualcosa che dovresti sapere - quando usi OSGi devi avviare la tua applicazione in un ambiente speciale. Questo ambiente (ad esempio Eclipse Equinox) è responsabile dell'esecuzione dell'applicazione. Fornisce alcune possibilità di fantasia. Ad esempio è possibile aggiungere un pacchetto a un'applicazione già in esecuzione senza la necessità di interrompere questa applicazione - questo potrebbe essere un elemento molto importante in alcuni tipi di applicazioni (ma IMHO non ci sono molte applicazioni che avranno davvero bisogno di questo).

Ciò che è davvero molto importante è anche il fatto che alcune librerie open source potrebbero non essere completamente compatibili con l'infrastruttura OSGi e potrebbe essere difficile usarle fuori dagli schemi come nelle applicazioni Java standard (ricordate che in OSGi tutto dovrebbe essere un pacchetto). Tuttavia, molte librerie popolari sono state raggruppate in pacchetti, ad esempio Spring fornisce il suo bundles repository che contiene molte librerie popolari (ma non tutte).

OSGi è piuttosto complicato ed è difficile descriverlo e le sue possibilità in poche parole.Quello che ho scritto sono solo gli elementi più importanti (IMO) di OSGi. Ma OSGI è molto di più, ad es. i pacchetti possono inviare eventi a vicenda, possono fornire servizi a vicenda. Se sei interessato a maggiori dettagli ti suggerisco di passare attraverso un tutorial. Posso raccomandare this one in Java World. Dopo di che si può dare un'occhiata a this free e-book su OSGi (contiene molti dettagli). Tutti i dettagli su OSGi possono essere trovati nelle specifiche ufficiali ma non direi che sono facili da leggere (almeno all'inizio) - li puoi trovare here (prima di scaricare dovrai accettare la licenza e alcune note legali) .

Per riassumere, penso che OSGi sia utile per la creazione di applicazioni modulari, ma questo non è certo gratuito. È piuttosto uno standard pesante che potrebbe non consentirvi di fare alcune cose e costringerti a fare le cose in modo OSGi.

Alcune legate SO domande:

+0

Grazie mille per la risposta dettagliata :) – Izza

+0

ora con l'avvento di Microservices, in che modo microservizi diversi o migliori sono rispetto a OSGi? – yathirigan

1

Dovresti scrivere un libro per rispondere correttamente a questa domanda. Infatti molti libri sono stati scritti sull'argomento. Se vuoi davvero conoscere OSGi, ti consiglio di cercare un libro del genere.

OSGi è un framework di modularità Java. Non ha alcuna concorrenza credibile in questo dominio. Qualsiasi applicazione può trarre vantaggio dall'essere più modulare, ma la modularità non è gratuita. È più facile buttare tutto in un gigantesco classloader e non pensare troppo alle relazioni dei tuoi componenti. Se decidi di provare OSGi, l'eccellente tooling PDE che fa parte di Eclipse supporta lo sviluppo di OSGi con targeting non Eclipse e rende molto più semplice lavorare con OSGi.

1

La mia opinione personale è che OSGi porta più dolore che benefici. Se hai davvero bisogno di un'applicazione plug-in puoi iniziare a usare OSGi, ma devi scrivere il codice in modo plug-in, cosa non è affatto semplice (anche quando si installa un plugin in eclipse si consiglia di riavviare eclipse, avere non ho idea del motivo per cui usa OSGi)

Ho sviluppato due progetti al lavoro utilizzando OSGi, è molto lento all'inizio del progetto perché è necessario avvolgere un sacco di librerie pubbliche e non tutte sono possibili da avvolgere, perché potresti riscontrare un errore ClassNotDefoundError in fase di esecuzione a causa di problemi con il classloader quando lavori con oggetti proxy.

Tutte le modularità che abbiamo nei progetti che usano OSGi possono essere raggiunte usando solo Maven, quando si lavora con OSGi nessuno ti obbliga a scrivere un sacco di bundle a grana fine, se vuoi puoi scrivere l'applicazione del foro in un grande fascio.

Se parliamo di perdita di accoppiamento tra i componenti, è possibile ottenerlo utilizzando l'auto-cablaggio da quadro di iniezione delle dipendenze spring-core o google-guice.

3

La mia esperienza personale (2 anni) con OSGI è che il disegno tecnico supera i benefici funzionali di ordini di grandezza.

Ho riscontrato casi in cui dovresti creare/modificare 25+ file pom per implementare un finto simulatore!
Il design gioca un ruolo importante, ma trovo problematico che gli sviluppatori diventino esperti in argomenti (come Maven) che non hanno alcun impatto sul valore del cliente.
Inoltre, questo approccio non risponde bene con Agile. In realtà, sarebbe un'ottima idea per ... Waterfall
È tutto incentrato sul tuo obiettivo principale. Deliverables vs modelli di costruzione.

In breve, OSGI non è il male, ma è non è la soluzione migliore per i team di piccole dimensioni e il rapido time to market.