l10i ha scritto: Con OSGi questo non è il caso: l'applicazione è composta da una vasta serie di pacchetti, ognuno dei quali è stato progettato per gestire una parte separata della funzionalità. Questo approccio abilita la distribuzione a caldo all'interno dell'applicazione, poiché il framework è progettato per considerare l'effetto che il riavvio di un singolo jar porta all'applicazione nel suo complesso e consentire agli altri vasi di reagire in modo appropriato. Ciò offre la possibilità di preservare il più possibile lo stato dell'applicazione.
Solo per approfondire ulteriormente, le migliori applicazioni OSGi sono applicazioni orientate ai servizi che si integrano tramite il registro dei servizi OSGi. Questo registro di servizio è dinamico, i servizi possono andare e venire in qualsiasi momento e i clienti dei servizi OSGi reagiscono in modo appropriato a questa dinamica. Quindi supponiamo che la tua applicazione sia composta da un numero di pacchetti, incluso un pacchetto che utilizza un servizio di pagamento (ad esempio per gestire i pagamenti con carta di credito) e un altro pacchetto che fornisce tale servizio di pagamento. Se ti trovi in una situazione in cui il servizio di pagamento deve essere aggiornato (perché hai una soluzione critica o forse hai trovato un fornitore più economico, ecc.) Puoi aggiornare questo servizio di pagamento senza nemmeno togliere gli utenti di questo servizio. Per raggiungere questo obiettivo, è possibile aggiornare il pacchetto di servizi di pagamento stesso, ma ciò che vorrei raccomandare in questo caso è installare la nuova versione del pacchetto di servizi di pagamento accanto alla versione precedente della. Questo è possibile perché OSGi consente di coesistere più versioni dello stesso pacchetto. Quindi, una volta che il nuovo bundle è attivo e funzionante, è possibile rimuovere il vecchio pacchetto di servizi di pagamento, a quel punto i consumatori si gireranno automaticamente per utilizzare quelli nuovi, per gentile concessione del registro dei servizi OSGi.
Un'architettura simile all'esempio precedente è davvero potente e ottima per garantire che le applicazioni aziendali rimangano attive, e può essere realizzata utilizzando i servizi OSGi combinati con la possibilità di installare, disinstallare o aggiornare in modo dinamico i bundle OSGi.
BTW c'è un po 'più di dettaglio nell'esempio sopra in quanto i pacchetti possono anche essere scritti per utilizzare tutti i servizi di un tipo particolare - ciò che è meglio per voi dipende dalla vostra situazione.
Esistono diversi modi per utilizzare il registro del servizio OSGi, che è possibile utilizzare con lo ServiceTracker API, che è piuttosto di basso livello. Nella maggior parte dei casi è preferibile utilizzare un framework per questo come OSGi Declarative Services (DS), OSGi Blueprint o altri framework. Nella maggior parte dei casi questi framework funzionano tramite l'iniezione e gestiscono la dinamica del registro dei servizi OSGi. Per informazioni su DS o Blueprint, vedere OSGi 4.2 Enterprise Specification.
fonte
2011-10-13 07:49:37
Non ho mai sentito parlare di qualcuno che abbia effettuato correttamente il redeploying in produzione su un app server JEE (sì, tutti affermano che è possibile farlo, ma le librerie male gestite impediscono sempre che i vecchi classloader vengano sottoposti a garbage collection). http://stackoverflow.com/questions/5788862/how-do-you-update-your-java-ee-app-in-production/5887360 – earcam