markt 2005/01/14 14:47:39
Modified: catalina/src/share/org/apache/catalina/servlets
LocalStrings.properties LocalStrings_ja.properties
ManagerServlet.java
Log:
Fix bug 28830. ManagerServlet broken for deploy (&undeploy)
- Based on a patch provided by Stephane Bailliez
Revision Changes Path
1.22 +2 -0
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/LocalStrings.properties
Index: LocalStrings.properties
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/LocalStrings.properties,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- LocalStrings.properties 11 Jan 2003 21:10:28 -0000 1.21
+++ LocalStrings.properties 14 Jan 2005 22:47:38 -0000 1.22
@@ -52,6 +52,8 @@
managerServlet.deployed=OK - Deployed application at context path {0}
managerServlet.exception=FAIL - Encountered exception {0}
managerServlet.installed=OK - Installed application at context path {0}
+managerServlet.installUploadFail=FAIL - Install Upload Failed, Exception: {0}
+managerServlet.installUploadWarExists=FAIL - War file \"{0}\" already exists
on server
managerServlet.invalidPath=FAIL - Invalid context path {0} was specified
managerServlet.invalidWar=FAIL - Invalid application URL {0} was specified
managerServlet.listed=OK - Listed applications for virtual host {0}
1.7 +2 -0
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/LocalStrings_ja.properties
Index: LocalStrings_ja.properties
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/LocalStrings_ja.properties,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- LocalStrings_ja.properties 4 Mar 2003 17:22:15 -0000 1.6
+++ LocalStrings_ja.properties 14 Jan 2005 22:47:38 -0000 1.7
@@ -52,6 +52,8 @@
managerServlet.deployed=OK -
\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30d1\u30b9 {0}
\u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u914d\u5099\u3057\u307e\u3057\u305f
managerServlet.exception=\u5931\u6557 - \u4f8b\u5916 {0}
\u304c\u767a\u751f\u3057\u307e\u3057\u305f
managerServlet.installed=OK -
\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30d1\u30b9 {0}
\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3057\u305f
+managerServlet.installUploadFail=\u5931\u6557 -
\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u304c\u5931\u6557\u3057\u307e\u3057\u305f\u3001\u4f8b\u5916:
{0}
+managerServlet.installUploadWarExists=\u5931\u6557 -
WAR\u30d5\u30a1\u30a4\u30eb \"{0}\"
\u306f\u3059\u3067\u306b\u30b5\u30fc\u30d0\u4e0a\u306b\u5b58\u5728\u3057\u307e\u3059
managerServlet.invalidPath=\u5931\u6557 -
\u7121\u52b9\u306a\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30d1\u30b9 {0}
\u304c\u6307\u5b9a\u3055\u308c\u307e\u3057\u305f
managerServlet.invalidWar=\u5931\u6557 -
\u7121\u52b9\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eURL {0}
\u304c\u6307\u5b9a\u3055\u308c\u307e\u3057\u305f
managerServlet.listed=OK - \u30d0\u30fc\u30c1\u30e3\u30eb\u30db\u30b9\u30c8
{0}
\u306e\u30ea\u30b9\u30c8\u3055\u308c\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3
1.36 +48 -8
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/ManagerServlet.java
Index: ManagerServlet.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/ManagerServlet.java,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- ManagerServlet.java 5 Jan 2005 11:54:37 -0000 1.35
+++ ManagerServlet.java 14 Jan 2005 22:47:38 -0000 1.36
@@ -475,17 +475,42 @@
return;
}
+ // Identify the appBase of the owning Host of this Context
+ // (if any)
+ String appBase = ((Host) context.getParent()).getAppBase();
+ File appBaseDir = new File(appBase);
+ if (!appBaseDir.isAbsolute()) {
+ appBaseDir = new File(System.getProperty("catalina.base"),
+ appBase);
+ }
+ File localWar = new File(appBaseDir, basename + ".war");
+ if (localWar.exists()) {
+ writer.println(sm.getString
+ ("managerServlet.installUploadWarExists",localWar));
+ return;
+ }
+
// Upload the web application archive to a local WAR file
- File localWar = new File(deployed, basename + ".war");
+ File tempWar = new File(deployed, localWar.getName());
if (debug >= 2) {
- log("Uploading WAR file to " + localWar);
+ log("Uploading WAR file to " + tempWar);
}
try {
- uploadWar(request, localWar);
+ uploadWar(request, tempWar);
} catch (IOException e) {
log("managerServlet.upload[" + displayPath + "]", e);
writer.println(sm.getString("managerServlet.exception",
e.toString()));
+ tempWar.delete();
+ return;
+ }
+
+ // renameTo doc says it is supposed not to move the file in every
platform
+ boolean moved = tempWar.renameTo(localWar);
+ if (!moved){
+ writer.println(sm.getString
+ ("managerServlet.installUploadFail",localWar));
+ tempWar.delete();
return;
}
@@ -503,6 +528,10 @@
return;
}
+ // FIXME There is a race condition here. If liveDeploy is true it
means
+ // the deployer "could" start deploy the app before we start doing
it.
+ // This would need host synchronization here and in HostConfig
+
// Deploy this web application
try {
URL warURL =
@@ -1167,14 +1196,13 @@
}
// Validate the docBase path of this application
- String deployedPath = deployed.getCanonicalPath();
String docBase = context.getDocBase();
File docBaseDir = new File(docBase);
if (!docBaseDir.isAbsolute()) {
docBaseDir = new File(appBaseDir, docBase);
}
String docBasePath = docBaseDir.getCanonicalPath();
- if (!docBasePath.startsWith(deployedPath)) {
+ if (!docBasePath.startsWith(appBaseDir.getCanonicalPath())) {
writer.println(sm.getString("managerServlet.noDocBase",
displayPath));
return;
@@ -1190,15 +1218,27 @@
return;
}
deployer.remove(path);
+
+ String docBaseWarPath = null;
+
+ // Delete the directory if there is one
if (docBaseDir.isDirectory()) {
undeployDir(docBaseDir);
+ docBaseWarPath = docBaseDir.getCanonicalPath() + ".war";
} else {
- docBaseDir.delete(); // Delete the WAR file
+ docBaseWarPath = docBaseDir.getCanonicalPath();
}
+
+ // Delete the WAR file if there is one
+ File docBaseWar = new File(docBaseWarPath);
+ docBaseWar.delete();
+
+ // Delete the context xml file if there is one
String docBaseXmlPath =
- docBasePath.substring(0, docBasePath.length() - 4) + ".xml";
+ docBaseWarPath.substring(0, docBaseWarPath.length() - 4) +
".xml";
File docBaseXml = new File(docBaseXmlPath);
docBaseXml.delete();
+
writer.println(sm.getString("managerServlet.undeployed",
displayPath));
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]