2011-11-28 14 views
15

Abbiamo appena scoperto che tutte le volte che riavviamo JBoss, tutti i nostri client Java Web Start scaricano tutti i loro jar, invece di riutilizzare i jar memorizzati nella cache, anche se la nostra applicazione non è cambiata.Perché Java Web Start riscarica i jars da JBoss?

Da ciò che ho visto sul Web, Java Web Start esegue un HEAD HTTP per decidere se scaricare o meno un jar. Così ho lanciato HTTP HEAD su tutti i vasi della nostra applicazione e ho scoperto che dopo aver riavviato JBoss, il tempo modificato di tutti i vasi è cambiato!

Perché è questo e come posso risolvere il problema? I vasi all'interno degli archivi delle applicazioni non sono cambiati affatto. Per quanto posso dire, JBoss usa il tempo di avvio o il tempo di distribuzione come il tempo modificato. Ciò potrebbe compromettere completamente la capacità di Java Web Start di utilizzare i cache memorizzati nelle sessioni precedenti, se ho capito bene.

Usiamo JBoss 6, se questo è un problema. Precedentemente abbiamo usato JBoss 4. Voglio verificare se abbiamo avuto il problema sotto JBoss 4, ma ora abbiamo così tante dipendenze sul JBoss più recente che ci vorrà del lavoro per fare in modo che il test avvenga.

+0

Hai provato a configurare Tomcat al di fuori di JBoss e a mettere la tua app di webstart lassù? Che succede? Riporta diverse volte dopo l'arresto di tomcat? – chubbsondubs

risposta

3

Provare a distribuire l'applicazione come applicazione Web esplosa invece di un file WAR.

Ciò impedirebbe a JBoss di decomprimere l'applicazione e potenzialmente compromettere le date di modifica.

Dovrai gestire gli aggiornamenti della tua app in modo da preservare le date di modifica, ad esempio rsync, ma ciò potrebbe essere più semplice del downgrade o della patch di JBoss.

+0

Wow, non sono sicuro di cosa stia facendo JBoss con il mio orecchio e la mia guerra esplosa, ma ci sono voluti tre minuti senza dire nulla, poi ho lanciato un'eccezione quando è finito lo spazio permgen! – skiphoppy

+0

Per alcune versioni di JBoss, il nome della directory esplosa deve terminare con '.war' o' .ear' come appropriato. Lo stai facendo? – blahdiblah

+0

No, stavo facendo un altro stupido errore che ho corretto stamattina, e si scopre che funziona! Grazie per una soluzione semplice e concisa! :) – skiphoppy

2

Sembra che VFSUtils non mantenga lo lastModifiedDate del file quando monta il file system nella directory tmp all'avvio del server. È possibile applicare una patch ai metodi di copia in quella classe per provare a impostare la data/ora del nuovo file in base ai valori del file fisico.

Come risposta al commento di Chubbard: il problema non si verifica con Tomcat (tomcat 7.0.21 per la precisione).

0

C'è un problema (https://issues.jboss.org/browse/JBVFS-177) creato su VFSUtils.unzip() che non conserva i timestamp durante la distribuzione (ancora applicabile a JBoss 6.1).

Dato che il problema è collegato al metodo unzip, la soluzione di blahdiblah potrebbe effettivamente funzionare.

Un altro modo sarebbe utilizzare Java Web Start con una versione basata (modifica di jnlp con versionEnabled e creazione di una versione.xml).

Problemi correlati