Domanda

Cosa rende un modulo/servizio/un bit di funzionalità dell'applicazione un candidato particolarmente valido per un modulo OSGi?

Sono interessato all'utilizzo OSGi nelle mie candidature.Siamo un negozio Java e utilizziamo Spring in modo piuttosto estensivo, quindi sono propenso all'utilizzo Moduli dinamici Spring per piattaforme di servizi OSGi(tm)..Sto cercando un buon modo per incorporare un po' di OSGi in un'applicazione come prova.Qualcuno qui ha usato questa o una tecnologia OSGi simile?Ci sono delle insidie?

@Nicolas - Grazie, quello l'ho visto.È un buon tutorial, ma sto cercando più idee su come realizzare il mio primo bundle OSGi "vero", invece di un esempio di Hello World.

@david - Grazie per il collegamento!Idealmente, con un'app greenfield, progetterei il tutto in modo che fosse dinamico.Quello che sto cercando in questo momento, però, è introdurlo in una piccola parte di un'applicazione esistente.Supponendo che io possa scegliere qualsiasi parte dell'app, quali sono alcuni fattori da considerare che renderebbero quella parte migliore o peggiore come cavia OSGi?

È stato utile?

Soluzione

Bene, poiché non puoi avere una parte OSGi e una parte non OSGi, dovrai rendere OSGi l'intera app.Nella sua forma più semplice crei un singolo bundle OSGi dall'intera applicazione.Chiaramente questa non è una pratica ottimale, ma può essere utile per avere un'idea della distribuzione di un bundle in un contenitore OSGi (Equinox, Felix, Knoplerfish, ecc.).

Per portarlo al livello successivo ti consigliamo di iniziare a dividere la tua app in componenti, i componenti dovrebbero in genere avere una serie di responsabilità che possono essere isolate dal resto della tua applicazione attraverso una serie di interfacce e dipendenze di classe.Identificarli puramente a mano può variare da piuttosto semplice per un'applicazione altamente coesa ma ben progettata ma poco accoppiata a un incubo per il codice sorgente interbloccato con cui non si ha familiarità.

Un aiuto può venire da strumenti come JDipende che può mostrarti l'accoppiamento dei pacchetti Java con altri pacchetti/classi nel tuo sistema.Un pacchetto con accoppiamento efferente basso dovrebbe essere più facile da estrarre in un bundle OSGi rispetto a uno con accoppiamento efferente elevato.È possibile ottenere una visione ancora più approfondita dell'architettura con strumenti professionali come Struttura 101.

A livello prettamente tecnico, lavorando quotidianamente con un'applicazione composta da 160 bundle OSGi e utilizzando Spring DM posso confermare che il passaggio da Spring "normale" a Spring DM è in gran parte indolore.Lo spazio dei nomi aggiuntivo e il fatto che puoi (e dovresti) isolare la configurazione Spring specifica di OSGi in file separati rende ancora più semplice avere scenari di distribuzione OSGi sia con che senza.

OSGi è un modello di componenti ampio e profondo, documentazione che consiglio:

  • Specifiche OSGi R4:Ottieni i PDF delle specifiche Core e Compendium, sono canonici, autorevoli e molto leggibili.Tieni sempre a portata di mano una scorciatoia per accedervi, li consulterai.
  • Informati sulle migliori pratiche OSGi, c'è una vasta gamma di cose che puoi fare Potere fai solo un insieme di cose un po' più piccolo Dovrebbe fare e ci sono alcune cose che dovresti non farlo mai (Importazione dinamica:* Per esempio).

Alcuni link:

Altri suggerimenti

Quando impari una nuova tecnologia ricca di strumenti ti fa entrare nelle cose senza grossi grattacapi.A questo punto la comunità a ops4j.org fornisce un ricco set di strumenti chiamato "PAX" che include:

  • Corridore della Pace:Corri e passa facilmente da Felix, Equinox, Knopflerfish e Concierge
  • Costrutto di pace:Costruisci, organizza e realizza facilmente progetti OSGi con Maven
  • Drone della Pace:Metti alla prova i tuoi bundle OSGi con Junit pur essendo indipendente dal framework (utilizza PaxRunner)

Poi ci sono molte implementazioni dei servizi del compendio OSGi:

  • Registrazione della pace (registrazione),
  • Pace Web (servizio http),
  • Estensore Web Pax (sostegno alla guerra),
  • Moneta della Pace (configurazione),
  • Pax Shell (implementazione della shell, parte della prossima versione di osgi)
  • e altro ancora.

..ed esiste una comunità utile e indipendente dal framework, - ma ora è pubblicità ;-)

Questa risposta arriva quasi 3 anni dopo che è stata posta la domanda, ma il collegamento L'ho appena scoperto veramente buono, soprattutto per i principianti che utilizzano Maven.Una spiegazione passo passo.

La tua applicazione esistente è monolitica o suddivisa in processi/livelli separati?

Se a livelli, puoi convertire il livello intermedio/app per l'esecuzione in un contenitore OSGi.

Nell'esperienza del mio team, abbiamo trovato doloroso provare a fare cose web in OSGi.Altri punti critici sono Hibernate e Jakarta Commons Logging.

Trovo che le specifiche OSGi siano abbastanza leggibili e ti consiglio di stampare il diagramma di flusso che mostra l'algoritmo per il caricamento delle classi.Ti garantisco che avrai momenti in cui ti chiederai "perché ricevo un NoClassDefFoundError?":il diagramma di flusso ti dirà perché.

Tentativo http://neilbartlett.name/blog/osgibook/.Il libro contiene esempi pratici con le migliori pratiche OSGi.

Tentativo http://njbartlett.name/files/osgibook_preview_20091217.pdf

O

http://www.manning.com/hall/

Il secondo non è un libro che ho letto personalmente ma ne ho sentito parlare bene.

Il primo mi è stato molto utile.Inizialmente ti guida attraverso l'architettura e poi passa alle mani su OSGi.

Ci sono un paio di cose da tenere a mente se stai iniziando con OSGi.

Come accennato altrove in questo thread, conoscere il caricamento delle classi è davvero importante.Nella mia esperienza tutti prima o poi incontrano problemi con esso.

Un'altra cosa importante da ricordare è:non tenere mai riferimenti!Dai un'occhiata al modello di lavagna su cui si basa il concetto di servizi di OSGi (vedi il collegamento in una delle altre risposte).

Nella mia esperienza non dovresti provare a convertire un'applicazione monolitica in un'applicazione basata su OSGi.Questo di solito porta a un pasticcio grave e ingestibile.Cominciare da capo.

Scarica una delle implementazioni OSGi autonome disponibili gratuitamente.Ho trovato Knopflerfish piuttosto buono e stabile (lo uso in molti progetti).Inoltre viene fornito con un sacco di codice sorgente.Potete trovare qui: http://www.knopflerfish.org

Un altro buon tutorial può essere trovato qui. https://pro40.abac.com/deanhiller/cgi-bin/moin.cgi/OsgiTutorial

Peter Kriens della OSGi Alliance ha rilasciato una bella intervista: http://www.infoq.com/interviews/osgi-peter-kriens.La sua homepage e il suo blog (che è sempre una buona lettura potete trovarli qui: http://www.aqute.biz

Mi piace davvero il Tutorial su Apache Felix.Tuttavia, penso che in generale sfruttare OSGi nella tua applicazione non sia una di quelle decisioni "usiamo questo framework, perché è una pubblicità".È più una questione di design, ma tutto ciò che OSGi ti offre in termini di design, puoi averlo anche con Java vanilla.

Per quanto riguarda il runtime, non puoi semplicemente aggiungere un'applicazione esistente e abilitarla per OSGi.Ha bisogno di design per essere dinamico.Spring DM rende facile nascondertelo, ma è ancora lì e devi esserne consapevole.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top