Veniamo alla mia ipotesi (artigianale):
Oltre alla applicazione principale che chiameremo CMS, viene sempre
installata un applicazione che chiameremo "UpdateCentral" costituita
da qualche semplice servlet, la quale si collega ad orari prestabiliti
e chiamando una servlet su un nostro server controlla che la versione
installata dal cliente abbia una release inferiore a quella
disponibile sul server degli aggiornamenti.
Se esiste una versione più recente, questa viene scaricata sotto forma
di war da questo server e messa in una certa directory sotto
l'application server.
Finito di scaricare l'intero pacchetto (e qui dovrei realizzare o
trovare qualche libreria pronta che mi permetta di gestire il download
anche se c'è un interruzione di linea per poi riprenderlo)
l'applicazione/servlet "Update Central" dovrebbe scoppattare il tutto,
segnalare la necessità di interrompere il servizio lanciare qualche
script di allineamento come già succede ora e scambiare i context del
application server.
Non vedo al momento data la struttura dell'applicazione un sistema più
"nobile" (e un pò forse dovrei vergognarmene) ma è così.
Avete qualche consiglio da darmi? personalmente finchè si tratta di un
installazione semplice e controllata presso una nostra serverfarm
posso anche ipotizzare di tirare giù un istanza tomcat e manipolare il
file server.xml ( o rinominare le cartelle "old" con "new" per
capirci". Ma in una installazione complessa di un cliente gestita
autonomamente questo mi da da pensare, ci sono troppe variabili
aleatorie in gioco (e non sono un esperto di application server).
Grazie per i consigli che mi potrete dare (anche se sono del tipo "non esiste!")
A presto.
Massimo
Qualche giorno fa ho messo in produzione un'applicazione web, realizzata
con Wicket. Fin qui niente di strano. L'applicazione è in realtà
un'applicazione NetBeans RCP, cioè usa i componenti della Platform e i
meccanismi che li tengono insieme (ok, è scontato: l'applicazione è una
sorta di "blueMarine lato web" che ne riusa integralmente i componenti
di back-end). Per me il vantaggio di tutto ciò non è tanto l'esigenza
dell'aggiornamento via Update Center, quanto il riuso di componenti già
pronti e testati e la possibilità di modularizzare il disegno secondo
una strategia che mi è già nota. Però è chiaro che a questo punto
funzionano/funzionerebbero (devo provarli...) gli Update Center di
NetBeans, previa preparazione di qualche pagina web con le funzionalità
della dialog equivalente della IDE. Ora, in molti casi gli aggiornamenti
di NetBeans _non_ richiedono un riavvio dell'applicazione. Qualora lo
richiedessero, è possibile giocarsela con l'amministrazione di Tomcat
per far si che venga fatta ripartire la sola applicazione corrente
(nota: NON rideployata, ma fatta ripartire, dal momento che è possibile
far gestire i file della piattaforma in modo indipendente da Tomcat).
Come dicevo, si tratta di una cosa allo stadio preliminare, anche se
quello che deve fare per ora funziona (pur con qualche workaround). Ci
lavorerò nelle prossime settimane e mesi (penso che la manderò come
proposta a Jazoon e JavaOne, ho dovuto rinunciare a Devoxx perché sono
un un periodo infernale) e per ora non posso dire niente di più.
Se hai esigenze immediate, non posso esserti di molto aiuto; però,
seguendo questa falsariga, potresti andare a vedere come funziona OSGi
(acc... devo parlare della concorrenza) tenendo conto che Glassfish v3
supporta OSGi e quindi molto probabilmente può fare lo stesso tipo di
trucchetti.
--
Fabrizio Giudici, Ph.D. - Java Architect, Project Manager
Tidalwave s.a.s. - "We make Java work. Everywhere."
weblogs.java.net/blog/fabriziogiudici - www.tidalwave.it/blog
Fabrizio...@tidalwave.it - mobile: +39 348.150.6941
L'approccio Glassfish 3 + OSGi, sebbene sia anche lui una cosa nuova e
quindi usata da pochi, è probabilmente più standard (la differenza si
capisce facendo presente che è stata spiegata alla JavaOne, anche in un
keynote speech).
Per completezza, vale la pena ricordare che Hudson ha un meccanismo di
plugin installabili da update center. Però non so come funzionano e
credo che Kohsuke si sia rifatto tutto in casa.
In questo modo mi pare che sia più facile gestire imprevisti di
percorso, tipo: i moduli X,Y,Z erano previstii per la versione V2,
dovrebbe essere rilasciata la prox. settimana; X,Y sono pronti, Z no.
Bene, andiamo con X,Y e poi Z può seguire a ruota di pochi giorni; ma il
suo rilascio, piuttosto che richiedere un redeployment dell'applicazione
intera, prevederà solo la sua installazione come plugin.