Author: markt Date: Sun Dec 14 17:09:45 2014 New Revision: 1645471 URL: http://svn.apache.org/r1645471 Log: When using the (currently undocumented) save command, go direct to the StoreConfig MBean because: - It removes the dependency on StandardServer. - It enables the Manager Servlet to detect if the feature is supported or not and show a useful error message.
Modified: tomcat/trunk/java/org/apache/catalina/manager/LocalStrings.properties tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java Modified: tomcat/trunk/java/org/apache/catalina/manager/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/LocalStrings.properties?rev=1645471&r1=1645470&r2=1645471&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/manager/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/catalina/manager/LocalStrings.properties Sun Dec 14 17:09:45 2014 @@ -111,6 +111,8 @@ managerServlet.sslConnectorCiphers=OK - managerServlet.started=OK - Started application at context path {0} managerServlet.startFailed=FAIL - Application at context path {0} could not be started managerServlet.stopped=OK - Stopped application at context path {0} +managerServlet.storeConfig.invalidMBean=FAIL - Unable to find the StoreConfig Mbean. [{0}] is not a valid name for an MBean. +managerServlet.storeConfig.noMBean=FAIL - No StoreConfig MBean registered at [{0}]. Registration is typically performed by the StoreConfigLifecycleListener. managerServlet.threaddump=OK - JVM thread dump managerServlet.undeployed=OK - Undeployed application at context path {0} managerServlet.unknownCommand=FAIL - Unknown command {0} Modified: tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java?rev=1645471&r1=1645470&r2=1645471&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java (original) +++ tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java Sun Dec 14 17:09:45 2014 @@ -30,6 +30,7 @@ import java.util.Map; import java.util.Set; import javax.management.MBeanServer; +import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.naming.Binding; import javax.naming.NamingEnumeration; @@ -53,7 +54,6 @@ import org.apache.catalina.Session; import org.apache.catalina.Wrapper; import org.apache.catalina.connector.Connector; import org.apache.catalina.core.StandardHost; -import org.apache.catalina.core.StandardServer; import org.apache.catalina.startup.ExpandWar; import org.apache.catalina.util.ContextName; import org.apache.catalina.util.RequestUtil; @@ -575,22 +575,33 @@ public class ManagerServlet extends Http /** * Store server configuration. * - * @param path Optional context path to save + * @param writer Destination for any user message(s) during this operation + * @param path Optional context path to save + * @param smClient i18n support for current client's locale */ - protected synchronized void save(PrintWriter writer, String path, - StringManager smClient) { + protected synchronized void save(PrintWriter writer, String path, StringManager smClient) { - Server server = ((Engine)host.getParent()).getService().getServer(); + ObjectName storeConfigOname; + try { + // Note that there is only ever one StoreConfig per JVM and the + // name of the MBean is hard-coded. + storeConfigOname = new ObjectName("Catalina:type=StoreConfig"); + } catch (MalformedObjectNameException e) { + // Should never happen. The name above is valid. + log(sm.getString("managerServlet.exception"), e); + writer.println(smClient.getString("managerServlet.exception", e.toString())); + return; + } - if (!(server instanceof StandardServer)) { - writer.println(smClient.getString("managerServlet.saveFail", - server)); + if (!mBeanServer.isRegistered(storeConfigOname)) { + writer.println(smClient.getString( + "managerServlet.storeConfig.noMBean", storeConfigOname)); return; } if ((path == null) || path.length() == 0 || !path.startsWith("/")) { try { - ((StandardServer) server).storeConfig(); + mBeanServer.invoke(storeConfigOname, "storeConfig", null, null); writer.println(smClient.getString("managerServlet.saved")); } catch (Exception e) { log("managerServlet.storeConfig", e); @@ -610,7 +621,9 @@ public class ManagerServlet extends Http return; } try { - ((StandardServer) server).storeContext(context); + mBeanServer.invoke(storeConfigOname, "store", + new Object[] {context}, + new String [] { "java.lang.String"}); writer.println(smClient.getString("managerServlet.savedContext", path)); } catch (Exception e) { @@ -620,7 +633,6 @@ public class ManagerServlet extends Http return; } } - } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org