Author: markt
Date: Thu Mar 5 10:48:25 2015
New Revision: 1664301
URL: http://svn.apache.org/r1664301
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=56608
When deploying an external WAR, add watched resources in the expanded directory
based on whether the expanded directory is expected to exist rather than if it
does exist.
When triggering a reload due to a modified watched resource, ensure that
multiple changed watched resources only trigger one reload rather than a series
of reloads.
Modified:
tomcat/trunk/java/org/apache/catalina/startup/HostConfig.java
Modified: tomcat/trunk/java/org/apache/catalina/startup/HostConfig.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/HostConfig.java?rev=1664301&r1=1664300&r2=1664301&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/HostConfig.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/HostConfig.java Thu Mar 5
10:48:25 2015
@@ -598,13 +598,14 @@ public class HostConfig
}
}
+ boolean unpackWAR = unpackWARs;
+ if (unpackWAR && context instanceof StandardContext) {
+ unpackWAR = ((StandardContext) context).getUnpackWAR();
+ }
+
// Add the eventual unpacked WAR and all the resources which will
be
// watched inside it
if (isExternalWar) {
- boolean unpackWAR = unpackWARs;
- if (unpackWAR && context instanceof StandardContext) {
- unpackWAR = ((StandardContext) context).getUnpackWAR();
- }
if (unpackWAR) {
deployedApp.redeployResources.put(expandedDocBase.getAbsolutePath(),
Long.valueOf(expandedDocBase.lastModified()));
@@ -626,7 +627,7 @@ public class HostConfig
Long.valueOf(0));
}
}
- if (expandedDocBase.exists()) {
+ if (unpackWAR) {
deployedApp.redeployResources.put(expandedDocBase.getAbsolutePath(),
Long.valueOf(expandedDocBase.lastModified()));
addWatchedResources(deployedApp,
@@ -634,8 +635,9 @@ public class HostConfig
} else {
addWatchedResources(deployedApp, null, context);
}
- // Add the context XML to the list of files which should
trigger a redeployment
if (!isExternal) {
+ // For external docBases, the context.xml will have been
+ // added above.
deployedApp.redeployResources.put(
contextXml.getAbsolutePath(),
Long.valueOf(contextXml.lastModified()));
@@ -1303,23 +1305,25 @@ public class HostConfig
}
}
resources = app.reloadResources.keySet().toArray(new String[0]);
+ boolean update = false;
for (int i = 0; i < resources.length; i++) {
File resource = new File(resources[i]);
- if (log.isDebugEnabled())
- log.debug("Checking context[" + app.name +
- "] reload resource " + resource);
- long lastModified =
- app.reloadResources.get(resources[i]).longValue();
- if ((!resource.exists() && lastModified != 0L)
- || (resource.lastModified() != lastModified)) {
- // Reload application
- reload(app);
- // Update times
+ if (log.isDebugEnabled()) {
+ log.debug("Checking context[" + app.name + "] reload resource
" + resource);
+ }
+ long lastModified =
app.reloadResources.get(resources[i]).longValue();
+ if (resource.lastModified() != lastModified || update) {
+ if (!update) {
+ // Reload application
+ reload(app);
+ update = true;
+ }
+ // Update times. More than one file may have been updated. We
+ // don't want to trigger a series of reloads.
app.reloadResources.put(resources[i],
Long.valueOf(resource.lastModified()));
- app.timestamp = System.currentTimeMillis();
- return;
}
+ app.timestamp = System.currentTimeMillis();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]