2009-01-27 2 views
14

Wie kann Tomcat die Webanwendungsartefakte entfernen, wenn der Manager zum De-mplementieren der Anwendung verwendet wird?Tomcat deploy entfernt keine Webanwendungsartefakte

Ich benutze Tomcat 6.0.18. Die Anwendung wurde mit dem tomcat-maven-plugin 1.0-SNAPSHOT bereitgestellt, aber das Verhalten ist dasselbe über das Maven-Plugin oder das Web-Interface.

Die Tomcat-Dokumentation enthält Warnungen zur Funktionsweise von undeploy bei Manager How To.

Die Kriegsdatei kann entfernt werden; Das entpackte Anwendungsverzeichnis verhindert jedoch eine erneute Bereitstellung.

Antwort

2

Es kann sein, dass Ihre Anwendung nicht vollständig bereitgestellt werden kann, da Hintergrundthreads vorhanden sind (die Sie höchstwahrscheinlich selbst gestartet haben) oder lang andauernde Anforderungen, die verhindern, dass die Anwendung vollständig beendet wird.

Haben Sie die Protokolldateien überprüft? Haben sie angegeben, ob die Anwendung erfolgreich deinstalliert werden konnte? Oder das Gegenteil? Können Sie einen Thread-Dump erhalten, nachdem Sie versucht haben, die Deimplementation durchzuführen (kill -3 processid auf Unix, Ctrl-Break in einer Konsole in Windows) und sehen, ob etwas noch läuft, das sollte nicht?

Beachten Sie auch, dass die meisten Anwendungen, die ich gesehen habe, nicht vollständig in Bezug auf den Speicher entfaltet werden können, die sie genommen haben. Ich bin ziemlich oft auf OutOfMemoryErrors (PermGen) gestoßen, besonders nach dem erneuten Einsatz von Webapps (Sie finden viele Referenzen auf PermGen, wenn Sie danach googeln). Ich denke, eine Neuverteilung ist in Ordnung für Entwicklungsmaschinen, aber nicht für Produktionsmaschinen. Es ist besser, dies zu wissen, bevor Sie sich in der Produktion darüber wundern.

26

Es kann auch ein Problem mit der Dateisperrung (insbesondere unter Windows) sein, wenn Sie über eine URL innerhalb Ihrer App auf Ressourcen in einer JAR-Bibliothek zugreifen.

Ich hatte gerade ein ähnliches Problem und reparierte sie durch die folgende Zeile in der

Apache Tomcat/conf/context.xml

Datei zu ändern:

<Context antiJARLocking="true" antiResourceLocking="true" > 

(Beachten Sie, dass es einen Konflikt gibt, ob dies produktionssicher ist, da es für jede erneute Bereitstellung Kopien Ihrer Webanwendung erstellt, aber unter Windows, und Sie das Problem nicht beheben können an der Quelle, dann kann dies eine praktikable Lösung bieten).

+1

Dieser Trick funktionierte für mich. Ich hatte Probleme, meine Grails-App mit dem Befehl "grails test tomcat undeploy" zu deimplementieren. Aber mit diesen Optionen fing es einfach magisch an zu arbeiten –

+5

Achte darauf, Tomcat docs sagt: "' antiJARLocking' ist eine Teilmenge von 'antiResourceLocking' und deshalb, um doppelte Arbeit und mögliche Probleme zu vermeiden, sollte nur eines dieser Attribute auf True gesetzt werden jedes Mal. ". – bluish