2011-11-02 37 views
28

Ho un semplice programma di servlet mondiale con cui sto giocando e lo spingo sul mio server tomcat su un VPS.Come eliminare la cache di tomcat quando si distribuisce un nuovo file .war? C'è un ambiente di configurazione?

Quando apporto una modifica al mio codice e lo distribuisco, tomcat non pubblica il codice appena pubblicato (anche dopo aver riavviato il servizio).

Interrompo il servizio, quindi spingo il nuovo file di guerra in/webapps /, e mi assicuro di eliminare anche la vecchia cartella esplosa.

Quando riavvio il server, serve ancora il codice più vecchio.

Esiste un'impostazione nella configurazione per interrompere questo comportamento?

Inoltre, quali cartelle dovrei eliminare? Si prega di essere specifici (cartelle e percorsi), come ho provato a cancellare alcuni e haven 'ottenuto ovunque.

+0

tomcat punta alla stessa directory in cui si pubblica il file di guerra? Se hai eliminato la versione esplosa (presumo la directory di lavoro) e riavviato il server, non riesco a pensare a come tomcat avrebbe avuto accesso al vecchio codice. Si prega di rivedere il vostro server.xml da vicino. – aishwarya

risposta

12

È possibile eliminare la directory "lavoro".

Sei sicuro che non si tratti di un problema di memorizzazione nella cache del browser?

+0

sì, ne sono sicuro, ho persino cancellato la cartella lavoro/catalini/localhost (o qualche cartella del genere), è successo alcune volte non a caso :) – Blankman

+0

L'eliminazione di cose nelle directory di tomcat non influisce necessariamente la cache del browser. –

+0

beh la nuova versione stava scrivendo i log in un file, e ho provato firefox (stavo usando chome prima) – Blankman

0

Sembra che il caricatore di classi non stia caricando le classi servlet una volta aggiornate. Questo potrebbe essere risolto se si modifica il file web.xml che dovrebbe richiedere al server/contenitore di ridistribuire e ricaricare le classi servlet. Immagino di aggiungere una riga vuota alla fine del tuo web.xml e salvarlo e poi vedere se lo risolve. Come ho detto, questo potrebbe risolverlo o no.

Buona fortuna!

+0

Non dovrebbe persistere dopo un riavvio dopo la rimozione completa della versione precedente, però. –

+0

Hmm, si. Normalmente non dovrebbe valere la pena di provarlo. – Mechkov

1

Sembra un problema di data e ora. Secondo la documentazione di tomcat, se c'è un nuovo jsp o servlet questo creerà un nuovo file _java nella cartella di lavoro a meno che i file _java.class non siano più recenti di jsp o servlet.

1

Tomcat crea inoltre una directory ROOT allo stesso livello di work/. ROOT/ memorizza nella cache anche le vecchie cose. eliminare ROOT insieme alla directory Catalina in work.

4

Aggiungo che in caso di comportamento davvero strano - dove si impiegano un paio d'ore per dire WTF - provare manualmente a cancellare la directory /webapps/yourwebapp/WEB-INF/classes. Un file sorgente java che è stato spostato in un altro pacchetto non avrà il file di classe compilato cancellato - almeno nel caso di un'applicazione Web esplosa su TC. Questo può seriamente far impazzire con un comportamento imprevedibile, specialmente con un servlet annotato.

2

Un po 'tardi per il partito, ecco come lo faccio

  1. applicazione Undeploy dal direttore
  2. Tomcat Shutdown utilizzando ./shutdown.sh
  3. cache del browser Elimina
  4. eliminare l'applicazione dal webapps, e da /work/Catalina/...
  5. Startup tomcat using ./startup.sh
  6. Copia la nuova versione dell'applicazione in /webapps e avvialo.
0

Ho passato un brutto periodo a mettere il mio file di guerra su /etc/tomcat7/webapps ma il vero percorso era /var/lib/tomcat7/webapps. Si può voler usare sudo find/-type f -name "my-war-file.war" per sapere dove si trova.

E rimuovere questa cartella /tmp/hsperfdata_* e /tmp/tomcat7-tomcat7-tmp.

2

ho incontrato alcuni comportamenti strani che non rispecchiano la base di codice vero e così dopo un po 'di tempo a cercare diverse soluzioni, il mio problema è stato risolto eliminando manualmente tutto sotto /var/cache/tomcat8/

+0

Nel mio caso classloader stava trovando una classe inesistente che, in seguito, non riusciva a caricare. Il problema era un file di classe obsoleto archiviato in/var/cache/tomcat6/... –

0

Ho avuto lo stesso problema due volte, ma nella seconda tempo ho capito che non era affatto un problema su Tomcat. Prova ad eliminare la cache del tuo browser, aggiorna la pagina e vedi se viene mostrata la nuova versione della pagina sul tuo server. Ha funzionato con me.

0

Sono nuovo di tomcat, e questo problema mi stava facendo impazzire oggi. Era sporadico. Ho chiesto ad un collega di aiutare, e la GUERRA si è espansa ed è stato fatto. 3 distribuisce più tardi quel giorno, è tornato alla versione originale.

Nel mio caso, il MySite.WAR è stato espanso per entrambi ROOT E MySite. Solitamente, MySite veniva servito. Ma a volte Tomcat ha deciso che è piaciuto il ROOT e meglio tutti i miei cambiamenti sono scomparsi.

La "soluzione" è eliminare il sito Web ROOT con ogni schieramento della guerra.

Problemi correlati