2014-05-19 17 views
5

So che ci sono molte domande su questo argomento. Ma si tratta principalmente di preservare lo stato delle classi e delle variabili.Reload classi durante il runtime JVM

Voglio rendere la mia applicazione per ottenere la sua versione più recente (tutto in un unico contenitore) e riavviare se stesso.

La mia applicazione utilizza la funzione main() proprio come punto di partenza, quindi ho appena inizializzato una classe e l'intera applicazione parte da lì. Quindi questo mi ha fatto pensare. Potrei fermare l'intera applicazione in main(). Sovrascrivi il vecchio jar e quindi la JVM potrebbe, in teoria, ricaricare tutte le classi tranne la classe contenente main() e il main reinizializza tutto ed eseguilo.

È troppo fastidioso? Dovrei semplicemente usare un jar bootstrap che gestisce solo il lancio di detto jar e il download della sua versione più recente.

+4

Uno script di shell bootstrap è probabilmente il più semplice. –

+0

Vuoi cambiare jar in fase di runtime? e non vuoi riavviare JVM? – Vipin

+0

dalla mia ipotesi, avrai almeno bisogno di un) jar diversi per la tua classe principale e le classi ricaricabili b) usare il reflection solo nella tua classe principale c) molto probabilmente un ClassLoader diverso per il jar ricaricabile – EasterBunnyBugSmasher

risposta

-3

Nella maggior parte delle applicazioni Java commerial che aggiornano automaticamente quasi sempre hanno sempre un'applicazione di bootstrap che controlla l'esecuzione dell'app principale. Sono sicuro che ci sono molti esempi anche su questo.

0

Vorrei prendere in considerazione l'utilizzo del contenitore OSGi. Ci sono molte implementazioni leggere, a basso sovraccarico qui come Apache Felix o Eclipse Equinox. Molti server di applicazioni Java sono costruiti su un kernel OSGi. Consente di scambiare hot-swap interi (bundle) o unità (funzioni) meno granulari in runtime con uno sforzo pressoché nullo.

Problemi correlati