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

Reply via email to