Frage Warum löscht Tomcat meine context.xml-Datei?


Ich entwickle eine Web-basierte Java-Anwendung bei der Arbeit und (offensichtlich) muss sie lokal während der Entwicklung ausführen. Ich habe die Tomcat-Dokumente gefunden und habe eine passende context.xml-Datei in /etc/tomcat6/Catalina/localhost/ Aber von Zeit zu Zeit beschließt Tomcat, es zu löschen! Was bedeutet, dass ich es zurückstellen und Tomcat neu starten muss.

Warum macht es das? Ich habe die Tomcat-Dokumente danach durchsucht und bin nicht klüger.

(Oh ja: es heißt eigentlich nicht context.xml aber owners.xml Das ist das HTTP-Pfadpräfix für diese Anwendung.)

Aktualisieren

Ich habe jetzt gesehen, Tomcat löscht die Datei während Tomcat lief. Ich denke, ich muss einen Fehler einreichen ...


21
2017-10-20 03:10


Ursprung


Habe dieses Problem zu. Es scheint, als wenn Sie Ihren Krieg ersetzen, verursacht es die Deimplementierung der App, die Löschung der Kontextdatei verursacht. Ich habe keinen Workaround, würde aber gerne einen haben, der bequemer ist als reloadable = false stackoverflow.com/questions/4032773/ ... - artemb


Antworten:


Kurze Zusammenfassung: Es gibt mehrere Bedingungen (wie das Ändern der WAR-Datei, Löschen der WebApp oder Ersetzen durch neue Inhalte), unter denen tomcat den Kontext deimplementiert, einschließlich des Entfernens der Kontextdatei.

Einzelheiten: Ob Tomcat AutoDeployment ausführt oder nicht (dh es wird nach Änderungen in Ihrem XML-Deskriptor gesucht und Änderungen im WebApp-Verzeichnis überprüft):

  1. server.xml im Abschnitt $ CATALINA_HOME / conf / server.xml aufgeführt:

    <Hostname = "localhost" appBase = "webapps" unpackWARs = "wahr" autoDeploy = "wahr" xmlValidation = "false" xmlNamespaceAware = "false">

  2. Sie können diese Eigenschaft auch in Ihrer Kontextdatei festlegen, indem Sie den Wert überladen

Zitieren des Dokuments für Fälle, in denen autoDeploy = Wahr kann das Entfernen Ihrer Kontextdatei verursachen:

  • Durch das Löschen einer WAR-Datei wird eine Deimplementierung der Anwendung ausgelöst mit dem Entfernen von jedem zugehörigen erweiterten Verzeichnis, Kontextdatei und Arbeitsverzeichnis.
  • Durch das Löschen eines Verzeichnisses wird eine Deimplementierung der Anwendung ausgelöst mit dem Entfernen der zugehörigen Kontextdatei und Arbeitsverzeichnis.
  • Durch das Aktualisieren einer WAR-Datei wird eine Deimplementierung der Anwendung ausgelöst mit dem Entfernen von jedem zugehörigen erweiterten Verzeichnis, Kontextdatei und Arbeitsverzeichnis.
  • Durch das Aktualisieren eines Verzeichnisses (nicht des Verzeichnisinhalts) wird eine Deimplementierung der Anwendung ausgelöst mit dem Entfernen der zugehörigen Kontextdatei und Arbeitsverzeichnis.

Erschöpfende Details: http://tomcat.apache.org/tomcat-6.0-doc/config/host.html#Automatic%20Application%20Deployment


17
2018-02-27 11:57



Dies ist keine vollständige Antwort - siehe serverfault.com/faq#deletion - Jenny D
:) bitte helft euch selbst (scheint die Syntax-Hervorhebung etwas anders zu sein als in stackoverflow, die vorher einen Teil der Antwort gelöscht hat) - Jan Zyka
Die Sache ist, dass, wenn Sie nur einen Link hinzufügen, das Ziel des Links verschwindet, was die Antwort nutzlos macht. Deshalb ermutigt serverfault.com Sie dazu, die tatsächliche Antwort anstatt nur den Link zu posten. Und als ich kommentierte, war der Rest des Textes nicht sichtbar. Ich würde immer noch empfehlen, eine ausführlichere Antwort als eine kurze Zusammenfassung des Links zu veröffentlichen. - Jenny D
Das ist einfach nicht wahr. Die ursprüngliche Antwort enthielt (und tut noch immer) eine kurze Zusammenfassung dessen, was Sie unter dem Link finden können. Ohne den Link ist die Antwort immer noch sinnvoll und zusammen mit dem Link finden Sie Details. - Jan Zyka
Aber ich hatte nicht vor, beleidigend zu sein, wenn es sich so anhörte :) Ich bin nicht sehr in dieses Netz hinein, sondern habe dasselbe gelöst und wollte es teilen. - Jan Zyka


Wenn du Ich möchte keine automatische Bereitstellung In Produktionsumgebungen können Sie beispielsweise die folgenden Attribute in der conf / Catalina / localhost-Kontextdatei berücksichtigen:

  • autoDeploy = "falsch"
  • und deployXML = "false"

autoDeploy = "false" funktioniert möglicherweise nicht allein, da die Anwendung context.xml (in META-INF) die Einstellungen von server.xml von autoDeploy überschreiben kann.

  • Die Anwendung META-INF / context.xml der Anwendung wird in der Entwicklungsumgebung mit autoDeploy verwendet
  • Der conf / Catalina / localhost-Kontext in der Produktion, ohne autoDeploy.

Dokumentation des deployXML-Attributs Attributdokumentation ist lesenswert (§ Standardimplementierung).

Umfangreiche AutoDeploy-Benutzer-Fall, und wenn Kontext entfernt: d. H. Anwendung nicht implementiert, Benutzer Fall dokumentiert ist, kann gefunden werden Hier.


5
2018-01-31 15:58





Ich kann nicht antworten Warum bisschen.

Jedoch, Dieser Link Sie können dies stoppen, indem Sie die autoDeploy="false" im server.xml


2
2017-10-20 05:55



Unter tomcat7 autoDeploy = "false" macht keinen Unterschied :( - Joseph Lust


Ich weiß ehrlich nicht, was die Gründe hinter Tomcat sind, dies zu tun, aber versuchen Sie, das folgende XML-Attribut zu Ihrem Kontextelement hinzuzufügen

reloadable="false"

Ihr Kontext könnte also ungefähr so ​​aussehen:

<Context path="/" docBase="/some/path/name" reloadable="false">
<!-- Context related stuff -->
</Context>

Dies sollte Tomcat davon abhalten, die Datei zu löschen


1
2017-10-20 04:22



Leider macht dies die Entwicklung schwieriger, da ich Tomcat nach jedem Build neu starten müsste. - staticsan
Checkout jrebel hilft bei der Entwicklung: zeroturnaround.com/jrebel - harmanjd


Manchmal sind unterschiedliche Werte für die App auf dem Server erforderlich, z. B. ein Pfad zum Speichern hochgeladener Dateien. In der Entwicklerumgebung mabe haben wir so etwas:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" reloadable="false">
     <Parameter name="rutaTrabajo" value="C:\Larry\Proyectos\app\rutaTrabajoxx" override="true"/>
</Context>

Aber im Server ist der Pfad anders:

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" >
     <Parameter name="rutaTrabajo" value="/usr/share/App/rutaTrabajo" override="true"/>
</Context>

Ich habe auch das gleiche Problem, tomcat löscht die context.xml (meapp.xml) von conf / Catalina / localhost

Zum Lösen verwende ich context.xml.default, im selben Pfad erstelle ich eine Datei namens context.xml.default und innerhalb einer put config möchte ich folgendes halten:

 cat context.xml.default
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/ParkMeServer" allowCasualMultipartParsing="true" >
     <Parameter name="rutaTrabajo" value="/usr/share/ParkiMeApp/rutaTrabajo" override="true"/>
</Context>

Also, bei der erneuten Bereitstellung der App, die Bestätigung parameteres immer noch da.


0
2017-10-27 00:56





Ich weiß, dass dies ein alter Thread ist, aber ich dachte, ich würde teilen, was ich gefunden habe, um dieses Problem zu beheben ...

Ich hatte genau das gleiche Problem mit meiner context.xml-Datei für meine Desktop-Version von tomcat, die jedes Mal, wenn ich eine neue Kopie der WAR-Datei für meine Anwendung bereitstellen würde, verpatzt wurde.

Das Problem war aufgrund der Tatsache, dass ich Änderungen an dieser Datei direkt auf dem Dateisystem vorgenommen habe. Das Problem wurde behoben, indem die Datei context.xml über meinen Eclipse-Editor bearbeitet wurde. Innen In meinem Eclipse gibt es ein "Server" -Projekt, das nach der Erweiterung einige Dateien wie context.xml und server.xml anzeigt. Es scheint, dass wenn Sie die Dateien von hier aus ändern Anstatt in das Dateisystem zu gehen, werden Ihre Änderungen beibehalten.

Ich habe diese Lösung im folgenden Thread gefunden: https://www.liferay.com/community/forums/-/message_boards/message/16511799

Ich hoffe, das hilft jemand anderem!

-StephenS


0
2018-04-11 17:07