Come posso implementare nella mia applicazione Java il controllo ad ogni apertura di una nuova versione disponibile? Nel caso in cui ci riuscissi come posso sostituire il jar con quello nuovo? Grazie in anticipo![]()
Come posso implementare nella mia applicazione Java il controllo ad ogni apertura di una nuova versione disponibile? Nel caso in cui ci riuscissi come posso sostituire il jar con quello nuovo? Grazie in anticipo![]()
Puoi fare così: sul tuo server (o da qualche parte online) piazzi un file di testo contenente il numero della versione più aggiornata del tuo programma. All'avvio dell'applicazione apri una connessione verso questo file e confronti la versione locale con la versione online: se quest'ultima è più aggiornata scarichi il nuovo jar.
Non è difficile da realizzare![]()
SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
Di questo libro e degli altri (blog personale di recensioni libri) | NO M.P. TECNICI
Grazie per la risposta.. però avrei dei dubbi su come effettuare la chiusura del vecchio jar, la sua cancellazione e l'apertura del nuovo jar appena scaricato.. qualche idea?
Secondo me non è nemmeno così banale...ci sono da considerare una serie di cose:Originariamente inviato da Alex'87
Puoi fare così: sul tuo server (o da qualche parte online) piazzi un file di testo contenente il numero della versione più aggiornata del tuo programma. All'avvio dell'applicazione apri una connessione verso questo file e confronti la versione locale con la versione online: se quest'ultima è più aggiornata scarichi il nuovo jar.
Non è difficile da realizzare![]()
1) cosa si intende per versione del programma? un mumero assegnato a ogni build? oppure un tag assegnato con opportuna convenzione sul SCM (Source Code Manager: svn, git...), o un numero gestito completamente a mano?
2) In generale sistemi come Windows non gradiscono troppo che si sostituisca il file di un programma in esecuzione, quindi oltre al gestire lo scaricamento del nuovo jar , va anche gestito il fatto che il programma deve terminare l'esecuzione per essere sostituito, quindi o si usa un modulo esterno al programma stesso o si prevede qualche altra strategia, in ogni caso un po difficile lo è a mio avviso.
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)
Ecco appuntoOriginariamente inviato da xxxlilloxxx
Grazie per la risposta.. però avrei dei dubbi su come effettuare la chiusura del vecchio jar, la sua cancellazione e l'apertura del nuovo jar appena scaricato.. qualche idea?![]()
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)
Sono riuscito a fare il controllo della versione e lo scaricamento del jar però non ho ancora le idee chiare su come effettuare la sostituzione del file.. nessuna idea?
La sostituzione del file la si fa come faresti la sostituzione di un altro file (e cioè apri il file e ci scrivi lo stream che ti arriva direttamente, o lo salvi prima in un altro file e poi sostituisci, insomma le solite cose). il problema è quello che ti ho detto : con ogni probabilità una sostituzione "a caldo" non piacerà ad alcuni sistemi operativi. Ci sono anche da considerare almeno altri 3 elementi non secondari:Originariamente inviato da xxxlilloxxx
Sono riuscito a fare il controllo della versione e lo scaricamento del jar però non ho ancora le idee chiare su come effettuare la sostituzione del file.. nessuna idea?
- generalmente, a meno che non si stia sviluppando un giocattolo, il proprio applicativo fa affidamento su delle librerie, e non è certo remota l'ipotesi di doverne aggiornare alcune quando si effettua un update. Questo conduce al problema di gestire anche la sostituzione delle dipendenze e non solo il jar principale. Come procedere? Si aggiornano tutte le librerie ogni volta? L'upgrade potrebbe risultare piuttosto oneroso, dovendo trasferire nella migliore delle ipotesi diversi megabyte dal server. Si aggiornano solo le librerie nuove? Va messo su un modo per capire quali sono e sostituirle una ad una.
- sempre nell'ipotesi generale, un programma legge e scrive quantomeno dei file di configurazione su filesystem, o dei file di preferenza utente, questi potrebbero cambiare di formato da una versione alla successiva del programma (a meno che non ci si voglia porre dei vincoli, che però talvolta non sono accettabili). Come operare con in pregresso? Occorre assicurare la retrocompatibilità e quindi migrare le vecchie preferenze utente in maniera trasparente per lui.
-un discorso simile si può fare per il salvataggio e la lettura dei dati (non tutti i programmi ne hanno bisogno ma molti si). Se una nuova versione del programma comporta un cambiamento del modello dei dati occorre gestire il cambiamento anche su eventuali tabelle di database o su file xml in modo che il nuovo codice possa operare senza problemi sui NUOVI dati manipolati post upgrade e va anche gestito il pregresso, nel senso che i vecchi dati devono essere migrati nella nuova forma..
Tutte queste considerazioni per farti capire che stiamo parlando di una faccenda tutt'altro che banale. Magari alcune di esse non riguardano il tuo programma ma ci devi comunque fare una bella pensata.
Nel frattempo ti posto un link che offre una bella lista di sistemi già pronti per gestire gli auto update. Ti dico subito che non ne ho provato alcuno e non so quali e in che modo gestiscano i problemi che ti ho esposto, magari fai sapere qui se ti cimenti con qualcuno di
questi
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)
Ti ringrazio per l'interessamento... comunque la mia non è una applicazione professionale anzi.. è solo un piccolo programmino che invia sms.. la necessità degli aggiornamenti potrebbe avvenire nel caso in cui il server che utilizzo venga chiuso.. o al massimo per qualche ritocco grafico della GUI.. nulla di eccezionale dunque.. devo solo riuscire a:
- Verificare se esiste una nuova versione all'apertura del programma;
- In caso affermativo scaricare il file jar
- Una volta scaricato il jar utilizzare un meccanismo che mi permetta di chiudere e cancellare il jar vecchio e sostituirlo con quello nuovo avviandolo.
da come ho detto precedentemente ho problemi col terzo passo.. comunque ora do una occhiata al link che mi hai dato.. ciao e grazie![]()
Purtroppo nessuna di queste soluzioni si è ritenuta efficace![]()
Un sistema piuttosto semplice da implementare è il seguente:
1) L'applicazione viene avviata da un programmino "starter".
2) Il programmino "starter", per prima cosa, verifica se c'è un determinato file in un determinato posto (ad esempio, il file "pippo.txt")
3) Se questo file esiste, esegue le operazioni indicate dal file (ad esempio, potrebbe prevedere che vi siano due stringhe: il file nuovo ed il file vecchio; quindi sostituisce il vecchio file con quello nuovo, prima dell'avvio dell'applicazione)
4) Alla fine, dopo aver fatto tutti i controlli, lo starter avvia la vera applicazione, passandogli tutto il classpath e gli eventuali parametri in ingresso
5) Lo starter termina, lasciando in esecuzione il programma
Chiaramente, la procedura di "aggiornamento" dovrebbe scaricare la nuova versione in un certo posto, quindi preoccuparsi di scrivere il file "pippo.txt" ed infine terminare il programma (o rilanciare lo starter, o altro).
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza