Author: schultz
Date: Thu Sep  6 15:05:54 2012
New Revision: 1381634

URL: http://svn.apache.org/viewvc?rev=1381634&view=rev
Log:
No functional change: a bit of clean-up before adding a new feature.


Modified:
    tomcat/tc7.0.x/trunk/   (props changed)
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java

Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
  Merged /tomcat/trunk:r1381623

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java?rev=1381634&r1=1381633&r2=1381634&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java 
Thu Sep  6 15:05:54 2012
@@ -21,10 +21,13 @@ import java.io.PrintWriter;
 import java.util.Set;
 
 import javax.management.Attribute;
+import javax.management.MBeanException;
 import javax.management.MBeanOperationInfo;
 import javax.management.MBeanParameterInfo;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
+import javax.management.OperationsException;
+import javax.management.ReflectionException;
 import javax.management.openmbean.CompositeData;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -44,6 +47,10 @@ public class JMXProxyServlet extends Htt
     
     private static final long serialVersionUID = 1L;
 
+    // Constant for "no parameters" when invoking a JMX operation
+    // without any parameters.
+    private static final String[] NO_PARAMETERS = new String[0];
+
     // ----------------------------------------------------- Instance Variables
     /**
      * MBean server.
@@ -77,7 +84,6 @@ public class JMXProxyServlet extends Htt
                       HttpServletResponse response)
         throws IOException, ServletException
     {
-
         response.setContentType("text/plain");
 
         PrintWriter writer = response.getWriter();
@@ -104,14 +110,8 @@ public class JMXProxyServlet extends Htt
         qry = request.getParameter("invoke");
         if(qry != null) {
             String opName=request.getParameter("op");
-            String ps = request.getParameter("ps");
-            String[] valuesStr;
-            if (ps == null) {
-                valuesStr = new String[0];
-            } else {
-                valuesStr = ps.split(",");
-            }
-            invokeOperation( writer, qry, opName,valuesStr );
+            String[] params = getInvokeParameters(request.getParameter("ps"));
+            invokeOperation(writer, qry, opName, params);
             return;
         }
         qry=request.getParameter("qry");
@@ -120,7 +120,6 @@ public class JMXProxyServlet extends Htt
         }
 
         listBeans( writer, qry );
-
     }
 
     public void getAttribute(PrintWriter writer, String onameStr, String att, 
String key) {
@@ -162,10 +161,7 @@ public class JMXProxyServlet extends Htt
                               String onameStr, String att, String val )
     {
         try {
-            ObjectName oname=new ObjectName( onameStr );
-            String type=registry.getType(oname, att);
-            Object valueObj=registry.convertValue(type, val );
-            mBeanServer.setAttribute( oname, new Attribute(att, valueObj));
+            setAttributeInternal(onameStr, att, val);
             writer.println("OK - Attribute set");
         } catch( Exception ex ) {
             writer.println("Error - " + ex.toString());
@@ -205,18 +201,7 @@ public class JMXProxyServlet extends Htt
     private void invokeOperation(PrintWriter writer, String onameStr, String 
op,
             String[] valuesStr) {
         try {
-            ObjectName oname=new ObjectName( onameStr );
-            MBeanOperationInfo methodInfo = registry.getMethodInfo(oname,op);
-            MBeanParameterInfo[] signature = methodInfo.getSignature();
-            String[] signatureTypes = new String[signature.length];
-            Object[] values = new Object[signature.length];
-            for (int i = 0; i < signature.length; i++) {
-               MBeanParameterInfo pi = signature[i];
-               signatureTypes[i] = pi.getType();
-               values[i] = registry.convertValue(pi.getType(), valuesStr[i] );
-           }
-
-            Object retVal = mBeanServer.invoke(oname,op,values,signatureTypes);
+            Object retVal = invokeOperationInternal(onameStr, op, valuesStr);
             if (retVal != null) {
                 writer.println("OK - Operation " + op + " returned:");
                 output("", writer, retVal);
@@ -229,6 +214,62 @@ public class JMXProxyServlet extends Htt
         }
     }
 
+
+    /**
+     * Parses parameter values from a parameter string.
+     * @param paramString The string containing comma-separated
+     *                    operation-invocation parameters, or
+     *                    <code>null</code> if there are no parameters.
+     * @return An array of String parameters (empty array if
+     *         <code>paramString</code> was <code>null</code>).
+     */
+    private String[] getInvokeParameters(String paramString) {
+        if (paramString == null)
+            return NO_PARAMETERS;
+        else
+            return paramString.split(",");
+    }
+
+    /**
+     * Sets an MBean attribute's value.
+     */
+    private void setAttributeInternal(String onameStr,
+                                      String attributeName,
+                                      String value)
+        throws OperationsException, MBeanException, ReflectionException {
+        ObjectName oname=new ObjectName( onameStr );
+        String type=registry.getType(oname, attributeName);
+        Object valueObj=registry.convertValue(type, value );
+        mBeanServer.setAttribute( oname, new Attribute(attributeName, 
valueObj));
+    }
+
+    /**
+     * Invokes an operation on an MBean.
+     * @param onameStr The name of the MBean.
+     * @param operation The name of the operation to invoke.
+     * @param parameters An array of Strings containing the parameters to the
+     *                   operation. They will be converted to the appropriate
+     *                   types to call the reuested operation.
+     * @return The value returned by the requested operation.
+     */
+    private Object invokeOperationInternal(String onameStr,
+                                           String operation,
+                                           String[] parameters)
+        throws OperationsException, MBeanException, ReflectionException {
+        ObjectName oname=new ObjectName( onameStr );
+        MBeanOperationInfo methodInfo = 
registry.getMethodInfo(oname,operation);
+        MBeanParameterInfo[] signature = methodInfo.getSignature();
+        String[] signatureTypes = new String[signature.length];
+        Object[] values = new Object[signature.length];
+        for (int i = 0; i < signature.length; i++) {
+           MBeanParameterInfo pi = signature[i];
+           signatureTypes[i] = pi.getType();
+           values[i] = registry.convertValue(pi.getType(), parameters[i] );
+         }
+
+        return mBeanServer.invoke(oname,operation,values,signatureTypes);
+    }
+
     private void output(String indent, PrintWriter writer, Object result) {
         if (result instanceof Object[]) {
             for (Object obj : (Object[]) result) {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to