remm 2004/11/11 16:48:41
Modified: catalina/src/share/org/apache/catalina/startup
HostConfig.java
Log:
- Fix an issue reported on tomcat-user. When a war includes a
/META-INF/context.xml, the autodeployer doesn't handle it correctly.
The cause of the issue is simply that the war and expanded folders were not
properly registered.
Revision Changes Path
1.49 +41 -20
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/HostConfig.java
Index: HostConfig.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/HostConfig.java,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -r1.48 -r1.49
--- HostConfig.java 5 Oct 2004 17:12:49 -0000 1.48
+++ HostConfig.java 12 Nov 2004 00:48:41 -0000 1.49
@@ -588,29 +588,35 @@
}
}
host.addChild(context);
+ // Get paths for WAR and expanded WAR in appBase
+ String name = null;
+ String path = context.getPath();
+ if (path.equals("")) {
+ name = "ROOT";
+ } else {
+ if (path.startsWith("/")) {
+ name = path.substring(1);
+ } else {
+ name = path;
+ }
+ }
+ File expandedDocBase = new File(name);
+ File warDocBase = new File(name + ".war");
+ if (!expandedDocBase.isAbsolute()) {
+ expandedDocBase = new File(appBase(), name);
+ warDocBase = new File(appBase(), name + ".war");
+ }
// Add the eventual unpacked WAR and all the resources which
will be
// watched inside it
if (isWar && unpackWARs) {
- String name = null;
- String path = context.getPath();
- if (path.equals("")) {
- name = "ROOT";
- } else {
- if (path.startsWith("/")) {
- name = path.substring(1);
- } else {
- name = path;
- }
- }
- File docBase = new File(name);
- if (!docBase.isAbsolute()) {
- docBase = new File(appBase(), name);
- }
- deployedApp.redeployResources.put(docBase.getAbsolutePath(),
- new Long(docBase.lastModified()));
- addWatchedResources(deployedApp, docBase.getAbsolutePath(),
context);
+
deployedApp.redeployResources.put(expandedDocBase.getAbsolutePath(),
+ new Long(expandedDocBase.lastModified()));
+ addWatchedResources(deployedApp,
expandedDocBase.getAbsolutePath(), context);
} else {
if (context.getDocBase() != null) {
+ // If the context is outside of the Host appBase,
removing the xml
+ // should remove the webapp
+ boolean external = false;
File docBase = new File(context.getDocBase());
if (!docBase.isAbsolute()) {
docBase = new File(appBase(), context.getDocBase());
@@ -618,6 +624,7 @@
try {
docBase = docBase.getCanonicalFile();
if
(!docBase.getAbsolutePath().startsWith(appBase().getAbsolutePath())) {
+ external = true;
deployedApp.redeployResources.put
(contextXml.getAbsolutePath(), new
Long(contextXml.lastModified()));
deployedApp.reloadResources.remove(contextXml.getAbsolutePath());
@@ -625,8 +632,22 @@
} catch (IOException e) {
// Ignore
}
+ if (!external) {
+ // Find an existing matching war and expanded folder
+ if (warDocBase.exists()) {
+
deployedApp.redeployResources.put(warDocBase.getAbsolutePath(),
+ new Long(warDocBase.lastModified()));
+ }
+ if (expandedDocBase.exists()) {
+
deployedApp.redeployResources.put(expandedDocBase.getAbsolutePath(),
+ new
Long(expandedDocBase.lastModified()));
+ addWatchedResources(deployedApp,
+ expandedDocBase.getAbsolutePath(),
context);
+ }
+ }
+ } else {
+ addWatchedResources(deployedApp, null, context);
}
- addWatchedResources(deployedApp, null, context);
}
} catch (Throwable t) {
log.error(sm.getString("hostConfig.deployDescriptor.error",
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]