dain 2004/07/26 10:14:49
Modified: applications/jmxdebug project.xml applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/web/beanlib MBeanInfoHelper.java MBeanServerHelper.java applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/web/velocity BasicVelocityActionServlet.java DebugServlet.java velocity.defaults applications/jmxdebug/src/webapp mbeaninfo.vm mbeanstack.vm modules/kernel/src/java/org/apache/geronimo/kernel/management State.java Added: applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/util ObjectNameComparator.java applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/web/beanlib AttributeData.java Removed: applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/util ObjectInstanceComparator.java Log: Fixed debug console Revision Changes Path 1.7 +13 -1 incubator-geronimo/applications/jmxdebug/project.xml Index: project.xml =================================================================== RCS file: /home/cvs/incubator-geronimo/applications/jmxdebug/project.xml,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- project.xml 24 Jun 2004 20:59:51 -0000 1.6 +++ project.xml 26 Jul 2004 17:14:48 -0000 1.7 @@ -31,6 +31,18 @@ </dependency> <dependency> + <groupId>geronimo</groupId> + <artifactId>geronimo-kernel</artifactId> + <version>${pom.currentVersion}</version> + </dependency> + + <dependency> + <groupId>geronimo</groupId> + <artifactId>geronimo-common</artifactId> + <version>${pom.currentVersion}</version> + </dependency> + + <dependency> <groupId>mx4j</groupId> <artifactId>mx4j-jmx</artifactId> <version>2.0.1</version> 1.1 incubator-geronimo/applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/util/ObjectNameComparator.java Index: ObjectNameComparator.java =================================================================== /** * * Copyright 2004 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.geronimo.jmxdebug.util; import java.util.Comparator; import java.util.StringTokenizer; import javax.management.ObjectName; /** * Taken from orignial console-web module * * This class sort ObjectNames by canonical name. Unfortunately, it * will not place single token domains before multiple token domains of * the same type (foo.bar > foo at the moment). * * @version $Revision: 1.1 $ $Date: 2004/07/26 17:14:48 $ */ public class ObjectNameComparator implements Comparator { public static final ObjectNameComparator INSTANCE = new ObjectNameComparator(); private static final int LEFT_GREATER = 1; private static final int RIGHT_GREATER = -1; private static final int EQUAL = 0; public int compare(Object o1, Object o2) { String leftName = ((ObjectName) o1).getCanonicalName(); String rightName = ((ObjectName) o2).getCanonicalName(); StringTokenizer leftDomainTokenizer = new StringTokenizer(leftName, "."); StringTokenizer rightDomainTokenizer = new StringTokenizer(rightName, "."); while (leftDomainTokenizer.hasMoreTokens()) { if (!rightDomainTokenizer.hasMoreTokens()) { return RIGHT_GREATER; } String leftToken = leftDomainTokenizer.nextToken(); String rightToken = rightDomainTokenizer.nextToken(); int comparison = leftToken.compareToIgnoreCase(rightToken); if (comparison != 0) { return comparison; } } // left has no more tokens if (rightDomainTokenizer.hasMoreTokens()) { return LEFT_GREATER; } // both ran out of tokens so they are equal return EQUAL; } } 1.2 +59 -76 incubator-geronimo/applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/web/beanlib/MBeanInfoHelper.java Index: MBeanInfoHelper.java =================================================================== RCS file: /home/cvs/incubator-geronimo/applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/web/beanlib/MBeanInfoHelper.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- MBeanInfoHelper.java 18 Feb 2004 15:33:09 -0000 1.1 +++ MBeanInfoHelper.java 26 Jul 2004 17:14:48 -0000 1.2 @@ -17,25 +17,24 @@ package org.apache.geronimo.jmxdebug.web.beanlib; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.SortedMap; +import java.util.TreeMap; +import javax.management.AttributeNotFoundException; +import javax.management.InstanceNotFoundException; +import javax.management.MBeanAttributeInfo; +import javax.management.MBeanException; import javax.management.MBeanInfo; -import javax.management.ObjectInstance; +import javax.management.MBeanOperationInfo; import javax.management.MBeanServer; import javax.management.ObjectName; -import javax.management.MalformedObjectNameException; import javax.management.ReflectionException; -import javax.management.InstanceNotFoundException; -import javax.management.IntrospectionException; -import javax.management.MBeanAttributeInfo; -import javax.management.MBeanOperationInfo; -import javax.management.MBeanException; -import javax.management.AttributeNotFoundException; import javax.management.RuntimeMBeanException; -import java.util.Map; -import java.util.List; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.ArrayList; -import java.util.HashMap; /** * Simple helper bean for dealing with MBeanInfo. Helps dodge such @@ -45,43 +44,28 @@ * @version $Id$ */ public class MBeanInfoHelper { + private final ObjectName objectName; + private final MBeanInfo info; + private final MBeanServer server; - ObjectName oName; - MBeanInfo info; - - public MBeanInfoHelper(String name) { - MBeanServer server = MBeanServerHelper.getMBeanServer(); - + public MBeanInfoHelper(MBeanServerHelper kernelHelper, String name) throws Exception { + server = kernelHelper.getKernel().getMBeanServer(); if (server != null) { - init(server, name); + objectName = new ObjectName(name); + info = server.getMBeanInfo(objectName); + } else { + objectName = null; + info = null; } - } - void init(MBeanServer server, String name) { - try { - oName = new ObjectName(name); - info = server.getMBeanInfo(oName); - } - catch (MalformedObjectNameException e) { - e.printStackTrace(); - } - catch (ReflectionException e) { - e.printStackTrace(); - } - catch (InstanceNotFoundException e) { - e.printStackTrace(); - } - catch (IntrospectionException e) { - e.printStackTrace(); - } } public String getCanonicalName() { - return oName.getCanonicalName(); + return objectName.getCanonicalName(); } public String getDomain() { - return oName.getDomain(); + return objectName.getDomain(); } /** @@ -92,11 +76,9 @@ * $item.key * $item.value * #end - * - * @return */ public List getKeyProperties() { - Hashtable h = oName.getKeyPropertyList(); + Hashtable h = objectName.getKeyPropertyList(); Iterator it = h.keySet().iterator(); @@ -124,48 +106,49 @@ return info.getClassName(); } - public List getAttributes() { - - List l = new ArrayList(); + public SortedMap getAttributes() { + TreeMap attributes = new TreeMap(); + MBeanAttributeInfo[] arr = info.getAttributes(); - MBeanServer server = MBeanServerHelper.getMBeanServer(); for (int i = 0; i < arr.length; i++) { - MBeanAttributeInfo foo = arr[i]; - Object value = null; - try { - value = server.getAttribute(oName, foo.getName()); - } - catch (MBeanException e) { - e.printStackTrace(); - } - catch (AttributeNotFoundException e) { - e.printStackTrace(); - } - catch (InstanceNotFoundException e) { - e.printStackTrace(); - } - catch (ReflectionException e) { - e.printStackTrace(); + MBeanAttributeInfo attribute = arr[i]; + String name = attribute.getName(); + + if ((!attribute.isReadable() && !attribute.isWritable()) || name.startsWith("$")) { + // hide attributes that are not readable or writable or start with a '$' + continue; } - catch (RuntimeMBeanException rme) { - rme.printStackTrace(); + + Object value = null; + if (attribute.isReadable()) { + try { + value = server.getAttribute(objectName, name); + } catch (MBeanException e) { + e.printStackTrace(); + } catch (AttributeNotFoundException e) { + e.printStackTrace(); + } catch (InstanceNotFoundException e) { + e.printStackTrace(); + } catch (ReflectionException e) { + e.printStackTrace(); + } catch (RuntimeMBeanException rme) { + rme.printStackTrace(); + } } - Map m = new HashMap(); - m.put("info", foo); - m.put("value", value); - l.add(m); + try { + AttributeData attributeData = new AttributeData(attribute, value, server.getClassLoaderFor(objectName)); + attributes.put(name, attributeData); + } catch (Exception e) { + // ignore; just hide weird attributes + } } - return l; + return attributes; } - public MBeanOperationInfo[] getOperationInfo() { - MBeanOperationInfo foo; - return info.getOperations(); } - } 1.2 +38 -43 incubator-geronimo/applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/web/beanlib/MBeanServerHelper.java Index: MBeanServerHelper.java =================================================================== RCS file: /home/cvs/incubator-geronimo/applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/web/beanlib/MBeanServerHelper.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- MBeanServerHelper.java 18 Feb 2004 15:33:09 -0000 1.1 +++ MBeanServerHelper.java 26 Jul 2004 17:14:48 -0000 1.2 @@ -17,17 +17,17 @@ package org.apache.geronimo.jmxdebug.web.beanlib; -import org.apache.geronimo.jmxdebug.util.ObjectInstanceComparator; - -import javax.management.MBeanServer; -import javax.management.MBeanServerFactory; -import javax.management.ObjectName; -import javax.management.MalformedObjectNameException; -import java.util.List; -import java.util.Collection; -import java.util.Set; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; +import java.util.List; +import java.util.Set; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; + +import org.apache.geronimo.jmxdebug.util.ObjectNameComparator; +import org.apache.geronimo.kernel.Kernel; +import org.apache.geronimo.kernel.management.State; /** * Little helper bean to deal w/ the mbean server @@ -35,30 +35,18 @@ * @version $Id$ */ public class MBeanServerHelper { - final private MBeanServer server; + private final Kernel kernel; public MBeanServerHelper() { - this.server = getMBeanServer(); + kernel = Kernel.getSingleKernel(); } - /** - * Returns the mbean server. Hokey as we just take the first - * one... - * - * @return - */ - public static MBeanServer getMBeanServer() { - List l = MBeanServerFactory.findMBeanServer(null); - - if (l.size() > 0) { - return (MBeanServer) l.get(0); - } - - return null; + public Kernel getKernel() { + return kernel; } /** - * Returns a Collection of InstanceObjects for all mbeans in the server + * Returns a Collection of InstanceObjects for all mbeans in the server * * @return Collection of InstanceObjects */ @@ -67,35 +55,42 @@ } /** - * Returns a Collection of InstanceObjects filtered by the input - * filter + * Returns a Collection of InstanceObjects filtered by the input filter * - * @param filterString filter to use. Defaults to *:* if null + * @param filterString filter to use. Defaults to *:* if null * @return Collection of InstanceObjects that match the filter */ public Collection getMBeans(String filterString) { + if (filterString == null) { + filterString = "*:*"; + } - if (server != null) { - ObjectName objectName = null; + if (kernel != null) { + ObjectName filter = null; try { - objectName = new ObjectName((filterString == null ? "*:*" : filterString)); - Set s = server.queryMBeans(objectName, null); + filter = new ObjectName(filterString); + Set names = kernel.listGBeans(filter); - List list = new ArrayList(); - list.addAll(s); - ObjectInstanceComparator comparator = new ObjectInstanceComparator(); - Collections.sort(list, comparator); + List sortedNames = new ArrayList(names); + Collections.sort(sortedNames, ObjectNameComparator.INSTANCE); - return list; - } - catch (MalformedObjectNameException e) { + return sortedNames; + } catch (MalformedObjectNameException e) { e.printStackTrace(); } - } - else { + } else { System.out.println("MBeanServerHelper : error : no mbean server"); } return null; + } + + public String getState(ObjectName name) { + try { + int state = ((Integer) kernel.getAttribute(name, "state")).intValue(); + return State.toString(state); + } catch (Exception e) { + return null; + } } } 1.1 incubator-geronimo/applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/web/beanlib/AttributeData.java Index: AttributeData.java =================================================================== /** * * Copyright 2004 The Apache Software Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.geronimo.jmxdebug.web.beanlib; import java.beans.PropertyEditor; import javax.management.MBeanAttributeInfo; import org.apache.geronimo.common.propertyeditor.PropertyEditors; /** * @version $Revision: 1.1 $ $Date: 2004/07/26 17:14:48 $ */ public class AttributeData { private final String name; private final String value; private final String type; private final boolean readable; private final boolean writable; public AttributeData(String name, String value, String type, boolean readable, boolean writable) { this.name = name; this.value = value; this.type = type; this.readable = readable; this.writable = writable; } public AttributeData(MBeanAttributeInfo attributeInfo, Object value, ClassLoader cl) throws ClassNotFoundException { this.name = attributeInfo.getName(); PropertyEditor editor = PropertyEditors.findEditor(attributeInfo.getType(), cl); editor.setValue(value); this.value = editor.getAsText(); this.type = attributeInfo.getType(); this.readable = attributeInfo.isReadable(); this.writable = attributeInfo.isWritable(); } public String getName() { return name; } public String getValue() { return value; } public String getType() { return type; } public boolean isReadable() { return readable; } public boolean isWritable() { return writable; } } 1.2 +58 -102 incubator-geronimo/applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/web/velocity/BasicVelocityActionServlet.java Index: BasicVelocityActionServlet.java =================================================================== RCS file: /home/cvs/incubator-geronimo/applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/web/velocity/BasicVelocityActionServlet.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- BasicVelocityActionServlet.java 18 Feb 2004 15:33:41 -0000 1.1 +++ BasicVelocityActionServlet.java 26 Jul 2004 17:14:48 -0000 1.2 @@ -17,176 +17,132 @@ package org.apache.geronimo.jmxdebug.web.velocity; -import org.apache.velocity.app.VelocityEngine; -import org.apache.velocity.runtime.RuntimeConstants; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.Template; - +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.Iterator; +import java.util.Properties; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.servlet.ServletException; -import javax.servlet.ServletContext; -import java.lang.reflect.Method; -import java.util.Properties; -import java.util.Enumeration; -import java.io.InputStream; + +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.VelocityEngine; +import org.apache.velocity.runtime.RuntimeConstants; /** - * Simple servlet to dispatch based on 'action'. Also inits velocity in a - * simple way - * + * Simple servlet to dispatch based on 'action'. Also inits velocity in a + * simple way + * * @version $Id$ */ public abstract class BasicVelocityActionServlet extends HttpServlet { + public static final String DEFAULT_PROPS = "org/apache/geronimo/jmxdebug/web/velocity/velocity.defaults"; /** * for dispatch purposes */ - private final Class[] args = - {HttpServletRequest.class, HttpServletResponse.class}; + private static final Class[] DISPATCH_ARGS = {HttpServletRequest.class, HttpServletResponse.class}; /** - * velocity engine for this servlet + * velocity engine for this servlet */ - private VelocityEngine velEngine = new VelocityEngine(); - - public static final String DEFAULT_PROPS = - "org/apache/geronimo/jmxdebug/web/velocity/velocity.defaults"; + private final VelocityEngine velocityEngine = new VelocityEngine(); /** * for dispatching to the method specified... - * - * @param req - * @param res - * @throws ServletException - * @throws java.io.IOException */ - public void service(HttpServletRequest req, HttpServletResponse res) - throws ServletException, java.io.IOException { - - String actionVerb = getActionVerb(); + public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { - String what = req.getParameter(actionVerb); - - if (what == null) { - what = "defaultAction"; + // get the action + String action = req.getParameter(getActionVerb()); + if (action == null || action.length() == 0) { + action = "defaultAction"; } + // look up and invoke the method with the action name try { - Method method = this.getClass().getMethod(what, args); - - Object[] objs = {req, res}; - method.invoke(this, objs); - } - catch (NoSuchMethodException nsme) { + Method method = this.getClass().getMethod(action, DISPATCH_ARGS); + method.invoke(this, new Object[]{req, res}); + } catch (NoSuchMethodException nsme) { unknownAction(req, res); - } - catch (Exception e) { + } catch (Exception e) { log("BasicVelocityActionServlet.service() : exception", e); } } - public void init() - throws ServletException { - - /* - * get the default properties from the classloader - */ - + public void init() throws ServletException { Properties p = new Properties(); + // load the default properties file using the classloader try { - InputStream is = getClass().getClassLoader().getResourceAsStream(DEFAULT_PROPS); - - p.load(is); - } - catch (Exception e) { + p.load(getClass().getClassLoader().getResourceAsStream(DEFAULT_PROPS)); + } catch (Exception e) { log("BasicVelocityActionServlet : default " + DEFAULT_PROPS + " not found.", e); throw new ServletException(e); } - /* - * run through them and use them - */ - - for (Enumeration en = p.propertyNames(); en.hasMoreElements();) { - String key = (String) en.nextElement(); - - velEngine.setProperty(key, p.getProperty(key)); + // apply default propertis to velocitty engine + for (Iterator iterator = p.keySet().iterator(); iterator.hasNext();) { + String key = (String) iterator.next(); + velocityEngine.setProperty(key, p.getProperty(key)); } - /* - * for now, log to the servlet log - */ - - org.apache.geronimo.jmxdebug.web.velocity.ServletLogger sl = new org.apache.geronimo.jmxdebug.web.velocity.ServletLogger(getServletContext()); - velEngine.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM, sl); - - /* - * set an app context for the webapploader if we are using it - */ + // hook velocity logger up to the servlet logger + ServletLogger sl = new ServletLogger(getServletContext()); + velocityEngine.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM, sl); + // set an app context for the webapploader if we are using it ServletAppContext vssac = new ServletAppContext(getServletContext()); - velEngine.setApplicationAttribute(WebappLoader.KEY, vssac); + velocityEngine.setApplicationAttribute(WebappLoader.KEY, vssac); + // start the velocity engine try { - velEngine.init(); - } - catch (Exception e) { + velocityEngine.init(); + } catch (Exception e) { log("BasicVelocityActionServlet", e); throw new ServletException(e); } } /** - * Defines the 'action verb' for the app - * @return + * Defines the 'action verb' for the app */ protected abstract String getActionVerb(); /** * Called when there is a request w/ no action verb - * - * @param req - * @param res - * @throws ServletException - * @throws java.io.IOException */ public abstract void defaultAction(HttpServletRequest req, HttpServletResponse res) - throws ServletException, java.io.IOException; + throws ServletException, IOException; /** * Called when there is a request w/ invalid action verb - * - * @param req - * @param res - * @throws ServletException - * @throws java.io.IOException */ public abstract void unknownAction(HttpServletRequest req, HttpServletResponse res) - throws ServletException, java.io.IOException; + throws ServletException, IOException; protected VelocityEngine getVelocityEngine() { - return this.velEngine; + return this.velocityEngine; } protected boolean renderTemplate(HttpServletRequest req, - HttpServletResponse res, - VelocityContext vc, String template) { - boolean result = false; + HttpServletResponse res, + VelocityContext velocityContext, + String templateName) { try { - Template t = getVelocityEngine().getTemplate(template); - t.merge(vc, res.getWriter()); - result = true; - } - catch (Exception e) { - e.printStackTrace(); + Template template = getVelocityEngine().getTemplate(templateName); + template.merge(velocityContext, res.getWriter()); + return true; + } catch (Exception e) { + log("Error rendering template: " + templateName, e); } - return result; + return false; } /** 1.2 +44 -35 incubator-geronimo/applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/web/velocity/DebugServlet.java Index: DebugServlet.java =================================================================== RCS file: /home/cvs/incubator-geronimo/applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/web/velocity/DebugServlet.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- DebugServlet.java 18 Feb 2004 15:33:41 -0000 1.1 +++ DebugServlet.java 26 Jul 2004 17:14:48 -0000 1.2 @@ -17,25 +17,23 @@ package org.apache.geronimo.jmxdebug.web.velocity; -import org.apache.velocity.VelocityContext; -import org.apache.geronimo.jmxdebug.web.beanlib.MBeanServerHelper; -import org.apache.geronimo.jmxdebug.web.beanlib.MBeanInfoHelper; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.ServletException; import java.io.IOException; -import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.geronimo.jmxdebug.web.beanlib.MBeanInfoHelper; +import org.apache.geronimo.jmxdebug.web.beanlib.MBeanServerHelper; +import org.apache.velocity.VelocityContext; /** - * Simple servlet for looking at mbeans - * + * Simple servlet for looking at mbeans + * * @version $Id$ */ public class DebugServlet extends BasicVelocityActionServlet { - public static String OBJECT_NAME_FILTER_KEY = "ObjectNameFilter"; protected String getActionVerb() { @@ -43,14 +41,9 @@ } /** - * The only real action - just puts the mbean server helper in the - * context, and if there was a mbean specified for details, shoves - * a MBeanINfoHelper in the context - * - * @param req - * @param res - * @throws ServletException - * @throws IOException + * The only real action - just puts the mbean server helper in the + * context, and if there was a mbean specified for details, shoves + * a MBeanINfoHelper in the context */ public void defaultAction(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { @@ -64,16 +57,20 @@ VelocityContext vc = new VelocityContext(); - vc.put("mbctx", new MBeanServerHelper()); + MBeanServerHelper kernelHelper = new MBeanServerHelper(); + vc.put("mbctx", kernelHelper); vc.put("encoder", new KickSunInHead()); vc.put(OBJECT_NAME_FILTER_KEY, filterKey); if (beanName == null) { vc.put("template", "nobean.vm"); - } - else { + } else { + try { + vc.put("beanInfo", new MBeanInfoHelper(kernelHelper, beanName)); + } catch (Exception e) { + e.printStackTrace(); + } vc.put("template", "mbeaninfo.vm"); - vc.put("beanInfo", new MBeanInfoHelper(beanName)); } renderTemplate(req, res, vc, "index.vm"); @@ -86,23 +83,35 @@ /** - * Why oh why couldn't this be one class... + * Why oh why couldn't this be one class... */ public class KickSunInHead { - public String decode(String s) { - return URLDecoder.decode(s); + public String decode(String string) { + return decode(string, "UTF-8"); } - public String encode(String s) { - return URLEncoder.encode(s); + public String decode(String string, String encoding) { + if (string != null) { + try { + return URLDecoder.decode(string, encoding); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; } - public String encode(String s, String encoding) { - try { - return URLEncoder.encode(s, encoding); - } - catch (UnsupportedEncodingException uee) { - uee.printStackTrace(); + public String encode(String string) { + return encode(string, "UTF-8"); + } + + public String encode(String string, String encoding) { + if (string != null) { + try { + return URLEncoder.encode(string, encoding); + } catch (Exception e) { + e.printStackTrace(); + } } return null; 1.2 +3 -0 incubator-geronimo/applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/web/velocity/velocity.defaults Index: velocity.defaults =================================================================== RCS file: /home/cvs/incubator-geronimo/applications/jmxdebug/src/java/org/apache/geronimo/jmxdebug/web/velocity/velocity.defaults,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- velocity.defaults 18 Feb 2004 15:33:41 -0000 1.1 +++ velocity.defaults 26 Jul 2004 17:14:48 -0000 1.2 @@ -1,3 +1,6 @@ resource.loader = webapp webapp.resource.loader.class = org.apache.geronimo.jmxdebug.web.velocity.WebappLoader + +velocimacro.library.autoreload = true + 1.2 +20 -34 incubator-geronimo/applications/jmxdebug/src/webapp/mbeaninfo.vm Index: mbeaninfo.vm =================================================================== RCS file: /home/cvs/incubator-geronimo/applications/jmxdebug/src/webapp/mbeaninfo.vm,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- mbeaninfo.vm 18 Feb 2004 15:31:07 -0000 1.1 +++ mbeaninfo.vm 26 Jul 2004 17:14:49 -0000 1.2 @@ -1,19 +1,15 @@ - -<b>Info for :</b> $beanInfo.getCanonicalName() -<hr/> - <table> <tr> <td> - <b>Description : </b> + <b>ObjectName: </b> </td> <td> - $!beanInfo.getDescription() + $beanInfo.getCanonicalName() </td> </tr> <tr> <td> - <b>ClassName : </b> + <b>ClassName: </b> </td> <td> $!beanInfo.getClassName() @@ -21,49 +17,37 @@ </tr> <tr> <td> - <b>Domain : </b> + <b>State: </b> </td> <td> - $!beanInfo.getDomain() + $mbctx.getState($name) </td> </tr> </table> -<h3>Key Properties</h3> - -#foreach($i in $beanInfo.getKeyProperties()) -$i.key = $i.value -<br/> -#end - -<h3>MBean Attributes</h3> +<h3>Attributes</h3> <table> <tr> <th>Name</th> <th>Value</th> - <th>Type</th> - <th>R</th> - <th>W</th> - <th>Is</th> - <th>Desc</th> -</tr> - -#foreach($i in $beanInfo.getAttributes()) - -<tr> - <td>$i.info.getName()</td> - <td>$i.value</td> - <td>$i.info.getType()</td> - <td>$i.info.isReadable()</td> - <td>$i.info.isWritable()</td> - <td>$i.info.isIs()</td> - <td>$!i.info.getDescription()</td> +</tr> + +#foreach($i in $beanInfo.getAttributes().values()) + +#set($name = $i.name) +#if($name != "objectName" && $name != "statisticsProvider" && $name != "stateManageable" && $name != "eventProvider" && $name != "state" && $name != "startTime") +<tr> + <td>$name</td> + <td>$!i.value</td> </tr> #end + +#end </table> +<!-- <h3>MBean Operations</h3> @@ -81,3 +65,5 @@ </tr> #end </table> +--> + 1.2 +4 -5 incubator-geronimo/applications/jmxdebug/src/webapp/mbeanstack.vm Index: mbeanstack.vm =================================================================== RCS file: /home/cvs/incubator-geronimo/applications/jmxdebug/src/webapp/mbeanstack.vm,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- mbeanstack.vm 18 Feb 2004 15:31:07 -0000 1.1 +++ mbeanstack.vm 26 Jul 2004 17:14:49 -0000 1.2 @@ -9,6 +9,7 @@ (<a href="/geronimo-web-console/faq.jsp#objectName"/>help</a>) </form> +#set($filterParam = $encoder.encode($ObjectNameFilter, "UTF-8")) #set($currentDomain = "") #set($i = 0) #set($mbeanList = $mbctx.getMBeans($ObjectNameFilter)) @@ -19,10 +20,7 @@ <hr/> -#foreach($instance in $mbeanList) - - #set($name = $instance.getObjectName()) - +#foreach($name in $mbeanList) #if (!($name.getDomain().equals($currentDomain))) #if ($i != 0) @@ -38,9 +36,10 @@ #set($encodedName = $encoder.encode($cName, "UTF-8")) #set($where = $cName.indexOf(":") + 1) #set($output = $cName.substring($where)) + #set($state = $mbctx.getState($name)) <li> - <a href="index.vm?ObjectNameFilter=$encoder.encode($ObjectNameFilter, "UTF-8")&MBeanName=$encodedName">$output</a> + <a href="index.vm?ObjectNameFilter=$filterParam&MBeanName=$encodedName">$output</a> [$state] </li> #set($i = $i + 1) 1.6 +8 -1 incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/management/State.java Index: State.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/management/State.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- State.java 2 Jun 2004 19:46:24 -0000 1.5 +++ State.java 26 Jul 2004 17:14:49 -0000 1.6 @@ -63,6 +63,13 @@ return fromInt(index.intValue()); } + public static String toString(int state) { + if (state < 0 || state >= fromInt.length) { + throw new IllegalArgumentException("State must be between 0 and " + fromInt.length); + } + return fromInt[state].name; + } + /** * The user readable name of this state from the J2EE Management specification */