You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by rj...@apache.org on 2012/01/10 15:14:34 UTC

svn commit: r1229549 - in /tomcat/trunk: java/org/apache/catalina/manager/JMXProxyServlet.java java/org/apache/catalina/mbeans/MBeanDumper.java test/org/apache/catalina/mbeans/MBeanDumper.java test/org/apache/catalina/mbeans/TestRegistration.java

Author: rjung
Date: Tue Jan 10 14:14:34 2012
New Revision: 1229549

URL: http://svn.apache.org/viewvc?rev=1229549&view=rev
Log:
Reduce code duplication introduced in r1229536:
Use common MBeanDumper class for JMXProxyServlet
and Mean unit tests.

Added:
    tomcat/trunk/java/org/apache/catalina/mbeans/MBeanDumper.java
      - copied, changed from r1229536, tomcat/trunk/test/org/apache/catalina/mbeans/MBeanDumper.java
Removed:
    tomcat/trunk/test/org/apache/catalina/mbeans/MBeanDumper.java
Modified:
    tomcat/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java
    tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java

Modified: tomcat/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java?rev=1229549&r1=1229548&r2=1229549&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java (original)
+++ tomcat/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java Tue Jan 10 14:14:34 2012
@@ -21,13 +21,9 @@ package org.apache.catalina.manager;
 
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.lang.reflect.Array;
-import java.util.Iterator;
 import java.util.Set;
 
 import javax.management.Attribute;
-import javax.management.MBeanAttributeInfo;
-import javax.management.MBeanInfo;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 import javax.servlet.ServletException;
@@ -35,7 +31,7 @@ import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.tomcat.util.ExceptionUtils;
+import org.apache.catalina.mbeans.MBeanDumper;
 import org.apache.tomcat.util.modeler.Registry;
 
 /**
@@ -119,7 +115,7 @@ public class JMXProxyServlet extends Htt
             ObjectName oname = new ObjectName(onameStr);
             Object value = mBeanServer.getAttribute(oname, att);
             writer.println("OK - Attribute get '" + onameStr + "' - " + att
-                    + "= " + escape(value.toString()));
+                    + "= " + MBeanDumper.escape(value.toString()));
         } catch (Exception ex) {
             writer.println("Error - " + ex.toString());
         }
@@ -152,121 +148,8 @@ public class JMXProxyServlet extends Htt
             return;
         }
 
-        Iterator<ObjectName> it=names.iterator();
-        while( it.hasNext()) {
-            ObjectName oname=it.next();
-            writer.println( "Name: " + oname.toString());
-
-            try {
-                MBeanInfo minfo=mBeanServer.getMBeanInfo(oname);
-                // can't be null - I think
-                String code=minfo.getClassName();
-                if ("org.apache.commons.modeler.BaseModelMBean".equals(code)) {
-                    code=(String)mBeanServer.getAttribute(oname, "modelerType");
-                }
-                writer.println("modelerType: " + code);
-
-                MBeanAttributeInfo attrs[]=minfo.getAttributes();
-                Object value=null;
-
-                for( int i=0; i< attrs.length; i++ ) {
-                    if( ! attrs[i].isReadable() ) continue;
-                    if( ! isSupported( attrs[i].getType() )) continue;
-                    String attName=attrs[i].getName();
-                    if( "modelerType".equals( attName)) continue;
-                    if( attName.indexOf( "=") >=0 ||
-                            attName.indexOf( ":") >=0 ||
-                            attName.indexOf( " ") >=0 ) {
-                        continue;
-                    }
-
-                    try {
-                        value=mBeanServer.getAttribute(oname, attName);
-                    } catch( Throwable t) {
-                        log("Error getting attribute " + oname +
-                            " " + attName + " " + t.toString());
-                        continue;
-                    }
-                    if( value==null ) continue;
-                    String valueString;
-                    try {
-                        Class<?> c = value.getClass();
-                        if (c.isArray()) {
-                            int len = Array.getLength(value);
-                            StringBuilder sb = new StringBuilder("Array[" +
-                                    c.getComponentType().getName() + "] of length " + len);
-                            if (len > 0) {
-                                sb.append("\r\n");
-                            }
-                            for (int j = 0; j < len; j++) {
-                                sb.append("\t");
-                                Object item = Array.get(value, j);
-                                if (item == null) {
-                                    sb.append("NULL VALUE");
-                                } else {
-                                    try {
-                                        sb.append(escape(item.toString()));
-                                    }
-                                    catch (Throwable t) {
-                                        ExceptionUtils.handleThrowable(t);
-                                        sb.append("NON-STRINGABLE VALUE");
-                                    }
-                                }
-                                if (j < len - 1) {
-                                    sb.append("\r\n");
-                                }
-                            }
-                            valueString = sb.toString();
-                        }
-                        else {
-                            valueString = escape(value.toString());
-                        }
-                        writer.println( attName + ": " + valueString);
-                    }
-                    catch (Throwable t) {
-                        ExceptionUtils.handleThrowable(t);
-                    }
-                }
-            } catch (Throwable t) {
-                ExceptionUtils.handleThrowable(t);
-            }
-            writer.println();
-        }
-
-    }
-
-    public String escape(String value) {
-        // The only invalid char is \n
-        // We also need to keep the string short and split it with \nSPACE
-        // XXX TODO
-        int idx=value.indexOf( "\n" );
-        if( idx < 0 ) return value;
-
-        int prev=0;
-        StringBuilder sb=new StringBuilder();
-        while( idx >= 0 ) {
-            appendHead(sb, value, prev, idx);
-
-            sb.append( "\\n\n ");
-            prev=idx+1;
-            if( idx==value.length() -1 ) break;
-            idx=value.indexOf('\n', idx+1);
-        }
-        if( prev < value.length() )
-            appendHead( sb, value, prev, value.length());
-        return sb.toString();
-    }
-
-    private void appendHead( StringBuilder sb, String value, int start, int end) {
-        if (end < 1) return;
-
-        int pos=start;
-        while( end-pos > 78 ) {
-            sb.append( value.substring(pos, pos+78));
-            sb.append( "\n ");
-            pos=pos+78;
-        }
-        sb.append( value.substring(pos,end));
+        String dump = MBeanDumper.dumpBeans(mBeanServer, names);
+        writer.print(dump);
     }
 
     /**

Copied: tomcat/trunk/java/org/apache/catalina/mbeans/MBeanDumper.java (from r1229536, tomcat/trunk/test/org/apache/catalina/mbeans/MBeanDumper.java)
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/mbeans/MBeanDumper.java?p2=tomcat/trunk/java/org/apache/catalina/mbeans/MBeanDumper.java&p1=tomcat/trunk/test/org/apache/catalina/mbeans/MBeanDumper.java&r1=1229536&r2=1229549&rev=1229549&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/mbeans/MBeanDumper.java (original)
+++ tomcat/trunk/java/org/apache/catalina/mbeans/MBeanDumper.java Tue Jan 10 14:14:34 2012
@@ -35,19 +35,23 @@ import org.apache.tomcat.util.ExceptionU
  */
 public class MBeanDumper {
 
-    private static Log log = LogFactory.getLog(MBeanDumper.class);
+    private static final Log log = LogFactory.getLog(MBeanDumper.class);
+
+    private static final String CRLF = "\r\n";
 
     /**
      * The following code to dump MBeans has been copied from JMXProxyServlet.
      *
      */
-    public static void listBeans(MBeanServer mbeanServer, Set<ObjectName> names)
+    public static String dumpBeans(MBeanServer mbeanServer, Set<ObjectName> names)
     {
-
+        StringBuilder buf = new StringBuilder();
         Iterator<ObjectName> it=names.iterator();
         while( it.hasNext()) {
             ObjectName oname=it.next();
-            log.info( "Name: " + oname.toString());
+            buf.append("Name: ");
+            buf.append(oname.toString());
+            buf.append(CRLF);
 
             try {
                 MBeanInfo minfo=mbeanServer.getMBeanInfo(oname);
@@ -56,29 +60,31 @@ public class MBeanDumper {
                 if ("org.apache.commons.modeler.BaseModelMBean".equals(code)) {
                     code=(String)mbeanServer.getAttribute(oname, "modelerType");
                 }
-                log.info("modelerType: " + code);
+                buf.append("modelerType: ");
+                buf.append(code);
+                buf.append(CRLF);
 
                 MBeanAttributeInfo attrs[]=minfo.getAttributes();
                 Object value=null;
 
-                for( int i=0; i< attrs.length; i++ ) {
-                    if( ! attrs[i].isReadable() ) continue;
+                for (int i=0; i< attrs.length; i++) {
+                    if (! attrs[i].isReadable()) continue;
                     String attName=attrs[i].getName();
-                    if( "modelerType".equals( attName)) continue;
-                    if( attName.indexOf( "=") >=0 ||
-                            attName.indexOf( ":") >=0 ||
-                            attName.indexOf( " ") >=0 ) {
+                    if ("modelerType".equals(attName)) continue;
+                    if (attName.indexOf("=") >=0 ||
+                            attName.indexOf(":") >=0 ||
+                            attName.indexOf(" ") >=0 ) {
                         continue;
                     }
 
                     try {
                         value=mbeanServer.getAttribute(oname, attName);
-                    } catch( Throwable t) {
+                    } catch (Throwable t) {
                         log.error("Error getting attribute " + oname +
-                            " " + attName + " " + t.toString(), t);
+                            " " + attName + " " + t.toString());
                         continue;
                     }
-                    if( value==null ) continue;
+                    if (value==null) continue;
                     String valueString;
                     try {
                         Class<?> c = value.getClass();
@@ -87,7 +93,7 @@ public class MBeanDumper {
                             StringBuilder sb = new StringBuilder("Array[" +
                                     c.getComponentType().getName() + "] of length " + len);
                             if (len > 0) {
-                                sb.append("\r\n");
+                                sb.append(CRLF);
                             }
                             for (int j = 0; j < len; j++) {
                                 sb.append("\t");
@@ -104,7 +110,7 @@ public class MBeanDumper {
                                     }
                                 }
                                 if (j < len - 1) {
-                                    sb.append("\r\n");
+                                    sb.append(CRLF);
                                 }
                             }
                             valueString = sb.toString();
@@ -112,7 +118,10 @@ public class MBeanDumper {
                         else {
                             valueString = escape(value.toString());
                         }
-                        log.info( attName + ": " + valueString);
+                        buf.append(attName);
+                        buf.append(": ");
+                        buf.append(valueString);
+                        buf.append(CRLF);
                     }
                     catch (Throwable t) {
                         ExceptionUtils.handleThrowable(t);
@@ -121,8 +130,9 @@ public class MBeanDumper {
             } catch (Throwable t) {
                 ExceptionUtils.handleThrowable(t);
             }
-            log.info("");
+            buf.append(CRLF);
         }
+        return buf.toString();
 
     }
 

Modified: tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java?rev=1229549&r1=1229548&r2=1229549&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java (original)
+++ tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java Tue Jan 10 14:14:34 2012
@@ -133,10 +133,10 @@ public class TestRegistration extends To
         final MBeanServer mbeanServer = Registry.getRegistry(null, null).getMBeanServer();
         // Verify there are no Catalina or Tomcat MBeans
         Set<ObjectName> onames = mbeanServer.queryNames(new ObjectName("Catalina:*"), null);
-        MBeanDumper.listBeans(mbeanServer, onames);
+        log.info(MBeanDumper.dumpBeans(mbeanServer, onames));
         assertEquals("Unexpected: " + onames, 0, onames.size());
         onames = mbeanServer.queryNames(new ObjectName("Tomcat:*"), null);
-        MBeanDumper.listBeans(mbeanServer, onames);
+        log.info(MBeanDumper.dumpBeans(mbeanServer, onames));
         assertEquals("Unexpected: " + onames, 0, onames.size());
 
         final Tomcat tomcat = getTomcatInstance();
@@ -150,7 +150,7 @@ public class TestRegistration extends To
 
         // Verify there are no Catalina MBeans
         onames = mbeanServer.queryNames(new ObjectName("Catalina:*"), null);
-        MBeanDumper.listBeans(mbeanServer, onames);
+        log.info(MBeanDumper.dumpBeans(mbeanServer, onames));
         assertEquals("Found: " + onames, 0, onames.size());
 
         // Verify there are the correct Tomcat MBeans
@@ -210,10 +210,10 @@ public class TestRegistration extends To
 
         // There should be no Catalina MBeans and no Tomcat MBeans
         onames = mbeanServer.queryNames(new ObjectName("Catalina:*"), null);
-        MBeanDumper.listBeans(mbeanServer, onames);
+        log.info(MBeanDumper.dumpBeans(mbeanServer, onames));
         assertEquals("Remaining: " + onames, 0, onames.size());
         onames = mbeanServer.queryNames(new ObjectName("Tomcat:*"), null);
-        MBeanDumper.listBeans(mbeanServer, onames);
+        log.info(MBeanDumper.dumpBeans(mbeanServer, onames));
         assertEquals("Remaining: " + onames, 0, onames.size());
     }
 



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