From: markt Date: Thu, 21 Sep 2006 02:21:19 +0000 (+0000) Subject: Port fix for bug 34399 - disable the undeploy option if the webapp has not been ... X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=bc8a7e523054c2b604f5d2d09be6e9200262afb7;p=tomcat7.0 Port fix for bug 34399 - disable the undeploy option if the webapp has not been 'deployed' This occurs, for example, if the webapp is defined in server.xml git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@448434 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/manager/HTMLManagerServlet.java b/java/org/apache/catalina/manager/HTMLManagerServlet.java index ad84bb278..e53396fef 100644 --- a/java/org/apache/catalina/manager/HTMLManagerServlet.java +++ b/java/org/apache/catalina/manager/HTMLManagerServlet.java @@ -333,6 +333,7 @@ public final class HTMLManagerServlet extends ManagerServlet { Iterator iterator = sortedContextPathsMap.entrySet().iterator(); boolean isHighlighted = true; + boolean isDeployed = true; String highlightColor = null; while (iterator.hasNext()) { @@ -353,6 +354,13 @@ public final class HTMLManagerServlet extends ManagerServlet { } if (context != null ) { + try { + isDeployed = isDeployed(contextPath); + } catch (Exception e) { + // Assume false on failure for safety + isDeployed = false; + } + args = new Object[6]; args[0] = displayPath; args[1] = context.getDisplayName(); @@ -398,12 +406,18 @@ public final class HTMLManagerServlet extends ManagerServlet { if (context.getPath().equals(this.context.getPath())) { writer.print(MessageFormat.format( MANAGER_APP_ROW_BUTTON_SECTION, args)); - } else if (context.getAvailable()) { + } else if (context.getAvailable() && isDeployed) { + writer.print(MessageFormat.format( + STARTED_DEPLOYED_APPS_ROW_BUTTON_SECTION, args)); + } else if (context.getAvailable() && !isDeployed) { writer.print(MessageFormat.format( - STARTED_APPS_ROW_BUTTON_SECTION, args)); + STARTED_NONDEPLOYED_APPS_ROW_BUTTON_SECTION, args)); + } else if (!context.getAvailable() && isDeployed) { + writer.print(MessageFormat.format( + STOPPED_DEPLOYED_APPS_ROW_BUTTON_SECTION, args)); } else { writer.print(MessageFormat.format( - STOPPED_APPS_ROW_BUTTON_SECTION, args)); + STOPPED_NONDEPLOYED_APPS_ROW_BUTTON_SECTION, args)); } } @@ -584,7 +598,7 @@ public final class HTMLManagerServlet extends ManagerServlet { " \n" + "\n"; - private static final String STARTED_APPS_ROW_BUTTON_SECTION = + private static final String STARTED_DEPLOYED_APPS_ROW_BUTTON_SECTION = " \n" + " \n" + "  {1} \n" + @@ -595,7 +609,7 @@ public final class HTMLManagerServlet extends ManagerServlet { " \n" + "\n"; - private static final String STOPPED_APPS_ROW_BUTTON_SECTION = + private static final String STOPPED_DEPLOYED_APPS_ROW_BUTTON_SECTION = " \n" + " \n" + "  {1} \n" + @@ -606,6 +620,28 @@ public final class HTMLManagerServlet extends ManagerServlet { " \n" + "\n"; + private static final String STARTED_NONDEPLOYED_APPS_ROW_BUTTON_SECTION = + " \n" + + " \n" + + "  {1} \n" + + "  {3} \n" + + "  {5} \n" + + "  {7} \n" + + " \n" + + " \n" + + "\n"; + + private static final String STOPPED_NONDEPLOYED_APPS_ROW_BUTTON_SECTION = + " \n" + + " \n" + + "  {1} \n" + + "  {3} \n" + + "  {5} \n" + + "  {7} \n" + + " \n" + + " \n" + + "\n"; + private static final String DEPLOY_SECTION = "\n" + "
\n" + diff --git a/java/org/apache/catalina/manager/LocalStrings.properties b/java/org/apache/catalina/manager/LocalStrings.properties index feeabb131..31363a4c8 100644 --- a/java/org/apache/catalina/manager/LocalStrings.properties +++ b/java/org/apache/catalina/manager/LocalStrings.properties @@ -58,6 +58,7 @@ managerServlet.noRename=FAIL - Cannot deploy uploaded WAR for path {0} managerServlet.noRole=FAIL - User does not possess role {0} managerServlet.noSelf=FAIL - The manager can not reload, undeploy, stop, or undeploy itself managerServlet.noWrapper=Container has not called setWrapper() for this servlet +managerServlet.notDeployed=FAIL - Context {0} is defined in server.xml and may not be undeployed managerServlet.reloaded=OK - Reloaded application at context path {0} managerServlet.undeployd=OK - Undeployed application at context path {0} managerServlet.resourcesAll=OK - Listed global resources of all types diff --git a/java/org/apache/catalina/manager/ManagerServlet.java b/java/org/apache/catalina/manager/ManagerServlet.java index d71ed0c2f..d7dffceb3 100644 --- a/java/org/apache/catalina/manager/ManagerServlet.java +++ b/java/org/apache/catalina/manager/ManagerServlet.java @@ -1277,6 +1277,12 @@ public class ManagerServlet } } + if (!isDeployed(path)) { + writer.println(sm.getString("managerServlet.notDeployed", + RequestUtil.filter(displayPath))); + return; + } + if (!isServiced(path)) { addServiced(path); try { @@ -1369,6 +1375,19 @@ public class ManagerServlet /** + * Invoke the isDeployed method on the deployer. + */ + protected boolean isDeployed(String name) + throws Exception { + String[] params = { name }; + String[] signature = { "java.lang.String" }; + Boolean result = + (Boolean) mBeanServer.invoke(oname, "isDeployed", params, signature); + return result.booleanValue(); + } + + + /** * Invoke the check method on the deployer. */ protected void check(String name) @@ -1380,7 +1399,7 @@ public class ManagerServlet /** - * Invoke the check method on the deployer. + * Invoke the isServiced method on the deployer. */ protected boolean isServiced(String name) throws Exception { @@ -1393,7 +1412,7 @@ public class ManagerServlet /** - * Invoke the check method on the deployer. + * Invoke the addServiced method on the deployer. */ protected void addServiced(String name) throws Exception { @@ -1404,7 +1423,7 @@ public class ManagerServlet /** - * Invoke the check method on the deployer. + * Invoke the removeServiced method on the deployer. */ protected void removeServiced(String name) throws Exception { diff --git a/java/org/apache/catalina/startup/HostConfig.java b/java/org/apache/catalina/startup/HostConfig.java index fd23158cf..189f1582a 100644 --- a/java/org/apache/catalina/startup/HostConfig.java +++ b/java/org/apache/catalina/startup/HostConfig.java @@ -354,6 +354,23 @@ public class HostConfig } + /** + * Has the specified application been deployed? Note applications defined + * in server.xml will not have been deployed. + * @return true if the application has been deployed and + * false if the applciation has not been deployed or does not + * exist + */ + public boolean isDeployed(String name) { + DeployedApplication app = (DeployedApplication) deployed.get(name); + if (app == null) { + return false; + } else { + return true; + } + } + + // ------------------------------------------------------ Protected Methods @@ -671,8 +688,6 @@ public class HostConfig if (files == null) return; - boolean checkAdditionalDeployments = false; - for (int i = 0; i < files.length; i++) { if (files[i].equalsIgnoreCase("META-INF")) diff --git a/java/org/apache/catalina/startup/mbeans-descriptors.xml b/java/org/apache/catalina/startup/mbeans-descriptors.xml index 1d283c46a..be0bccb14 100644 --- a/java/org/apache/catalina/startup/mbeans-descriptors.xml +++ b/java/org/apache/catalina/startup/mbeans-descriptors.xml @@ -79,6 +79,15 @@ type="java.lang.String"/> + + + +