pero        2005/07/08 13:54:40

  Modified:    catalina/src/share/org/apache/catalina/ant/jmx
                        JMXAccessorQueryTask.java JMXAccessorTask.java
  Log:
  more support for MXBean data
  better property binding support
  
  Revision  Changes    Path
  1.3       +54 -60    
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorQueryTask.java
  
  Index: JMXAccessorQueryTask.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorQueryTask.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JMXAccessorQueryTask.java 30 Jun 2005 13:01:27 -0000      1.2
  +++ JMXAccessorQueryTask.java 8 Jul 2005 20:54:40 -0000       1.3
  @@ -135,31 +135,29 @@
           String resultproperty = getResultproperty();
           try {
               names = jmxServerConnection.queryNames(new ObjectName(qry), 
null);
  -            if (resultproperty != null)
  -                getProject().setNewProperty(resultproperty + ".length",
  -                        Integer.toString(names.size()));
  +            if (resultproperty != null) {
  +                setProperty(resultproperty + 
".Length",Integer.toString(names.size()));
  +            }
           } catch (Exception e) {
               if (isEcho())
                   handleErrorOutput(e.getMessage());
               return "Can't query mbeans " + qry;
           }
   
  -        Iterator it = names.iterator();
  -        int oindex = 0;
  -        String pname = null;
  -        while (it.hasNext()) {
  -            ObjectName oname = (ObjectName) it.next();
  -            pname = resultproperty + "." + Integer.toString(oindex) + ".";
  -            oindex++;
  -            if (isEcho())
  -                handleOutput(pname + "name=" + oname.toString());
  -            if (resultproperty != null) {
  -                getProject().setNewProperty(pname + "name",
  -                        oname.toString());
  -            }
  -            if (isAttributebinding()) {
  -                bindAttributes(jmxServerConnection, resultproperty, pname, 
oname);
  -            }
  +        if (resultproperty != null) {
  +            Iterator it = names.iterator();
  +            int oindex = 0;
  +            String pname = null;
  +            while (it.hasNext()) {
  +                ObjectName oname = (ObjectName) it.next();
  +                pname = resultproperty + "." + Integer.toString(oindex) + 
".";
  +                oindex++;
  +                    setProperty(pname + "Name", oname.toString());
  +                    if (isAttributebinding()) {
  +                        bindAttributes(jmxServerConnection, resultproperty, 
pname, oname);
  +                
  +                    }
  +                }
           }
           return isError;
       }
  @@ -171,50 +169,46 @@
        * @param oname
        */
       protected void bindAttributes(MBeanServerConnection jmxServerConnection, 
String resultproperty, String pname, ObjectName oname) {
  -        try {
  -            MBeanInfo minfo = jmxServerConnection.getMBeanInfo(oname);
  -            String code = minfo.getClassName();
  -            if ("org.apache.commons.modeler.BaseModelMBean"
  -                    .equals(code)) {
  -                code = (String) jmxServerConnection.getAttribute(oname,
  -                        "modelerType");
  -            }
  -            MBeanAttributeInfo attrs[] = minfo.getAttributes();
  -            Object value = null;
  -
  -            for (int i = 0; i < attrs.length; i++) {
  -                if (!attrs[i].isReadable())
  -                    continue;
  -                String attName = attrs[i].getName();
  -                if (attName.indexOf("=") >= 0
  -                        || attName.indexOf(":") >= 0
  -                        || attName.indexOf(" ") >= 0) {
  -                    continue;
  +        if (jmxServerConnection != null  && resultproperty != null 
  +            && pname != null && oname != null ) {
  +            try {
  +                MBeanInfo minfo = jmxServerConnection.getMBeanInfo(oname);
  +                String code = minfo.getClassName();
  +                if 
("org.apache.commons.modeler.BaseModelMBean".equals(code)) {
  +                    code = (String) jmxServerConnection.getAttribute(oname,
  +                            "modelerType");
                   }
  +                MBeanAttributeInfo attrs[] = minfo.getAttributes();
  +                Object value = null;
   
  -                try {
  -                    value = jmxServerConnection.getAttribute(oname,
  -                            attName);
  -                } catch (Throwable t) {
  -                    if (isEcho())
  -                        handleErrorOutput("Error getting attribute "
  -                                + oname + " " + pname + attName + " "
  -                                + t.toString());
  -                    continue;
  +                for (int i = 0; i < attrs.length; i++) {
  +                    if (!attrs[i].isReadable())
  +                        continue;
  +                    String attName = attrs[i].getName();
  +                    if (attName.indexOf("=") >= 0 || attName.indexOf(":") >= 0
  +                            || attName.indexOf(" ") >= 0) {
  +                        continue;
  +                    }
  +
  +                    try {
  +                        value = jmxServerConnection
  +                                .getAttribute(oname, attName);
  +                    } catch (Throwable t) {
  +                        if (isEcho())
  +                            handleErrorOutput("Error getting attribute "
  +                                    + oname + " " + pname + attName + " "
  +                                    + t.toString());
  +                        continue;
  +                    }
  +                    if (value == null)
  +                        continue;
  +                    if ("modelerType".equals(attName))
  +                        continue;
  +                    createProperty(pname + attName, value);
                   }
  -                if (value == null)
  -                    continue;
  -                if ("modelerType".equals(attName))
  -                    continue;
  -                String valueString = value.toString();
  -                if (isEcho())
  -                    handleOutput(pname + attName + "=" + valueString);
  -                if (resultproperty != null)
  -                    getProject().setNewProperty(pname + attName,
  -                            valueString);
  +            } catch (Exception e) {
  +                // Ignore
               }
  -        } catch (Exception e) {
  -            // Ignore
           }
       }
   }
  
  
  
  1.5       +76 -27    
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorTask.java
  
  Index: JMXAccessorTask.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/ant/jmx/JMXAccessorTask.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- JMXAccessorTask.java      1 Jul 2005 18:54:13 -0000       1.4
  +++ JMXAccessorTask.java      8 Jul 2005 20:54:40 -0000       1.5
  @@ -23,12 +23,15 @@
   import java.net.MalformedURLException;
   import java.net.UnknownHostException;
   import java.util.HashMap;
  +import java.util.Iterator;
   import java.util.Map;
  +import java.util.Set;
   import java.util.StringTokenizer;
   
   import javax.management.MBeanServerConnection;
   import javax.management.MalformedObjectNameException;
   import javax.management.ObjectName;
  +import javax.management.openmbean.CompositeDataSupport;
   import javax.management.remote.JMXConnector;
   import javax.management.remote.JMXConnectorFactory;
   import javax.management.remote.JMXServiceURL;
  @@ -461,8 +464,10 @@
   
           if ((jmxServerConnection == null)) {
                   throw new BuildException("Must open a connection!");
  +        } else if (isEcho()) {
  +            handleOutput("JMX Connection ref=" + ref + " is open!");
           }
  -        return null;
  +       return null;
       }
   
       /**
  @@ -552,40 +557,84 @@
   
       /**
        * create result as property with name from attribute resultproperty 
  -     * When result is an array and isSeparateArrayResults is true,
  -     * resultproperty used as prefix 
(<code>resultproperty.0-array.length</code> 
  -     * and store the result array length at 
<code>resultproperty.length</code>.
  -     * Other option is that you delemit your result with a delimiter 
(java.util.StringTokenizer is used).
        * @param result
  +     * @see #createProperty(String, Object)
        */
       protected void createProperty(Object result) {
           if (resultproperty != null) {
  -            if (result.getClass().isArray()) {
  -                if (isSeparatearrayresults()) {
  -                    Object array[] = (Object[]) result;
  -                    for (int i = 0; i < array.length; i++) {
  -                        getProject().setNewProperty(resultproperty + "." + i,
  -                                array[i].toString());
  +           createProperty(resultproperty,result);
  +        }
  +    }
  +    
  +   /**    
  +    * create result as property with name from property prefix  
  +    * When result is an array and isSeparateArrayResults is true,
  +    * resultproperty used as prefix 
(<code>resultproperty.0-array.length</code> 
  +    * and store the result array length at 
<code>resultproperty.length</code>.
  +    * Other option is that you delemit your result with a delimiter 
(java.util.StringTokenizer is used).
  +    * @param propertyPrefix
  +    * @param result
  +    */
  +    protected void createProperty(String propertyPrefix, Object result) {
  +        if (propertyPrefix == null)
  +            propertyPrefix = "";
  +        if (result instanceof CompositeDataSupport) {
  +            CompositeDataSupport data = (CompositeDataSupport) result ;
  +            Set keys = data.getCompositeType().keySet() ;
  +            for (Iterator iter = keys.iterator(); iter.hasNext();) {
  +                String key = (String) iter.next();  
  +                Object value = data.get(key);
  +                setProperty(propertyPrefix + "." + key , value);             
   
  +            }
  +        } else if (result.getClass().isArray()) {
  +            if (isSeparatearrayresults()) {
  +                Object array[] = (Object[]) result;
  +                int size = 0 ;
  +                for (int i = 0; i < array.length; i++) {
  +                    if(setProperty(propertyPrefix + "." + size , array[i])) {
  +                        size++;
                       }
  -                    getProject().setNewProperty(resultproperty + ".length",
  -                            Integer.toString(array.length));
  -                    return ;
  +                }
  +                if(size > 0) {
  +                    setProperty(propertyPrefix + ".Length",
  +                        Integer.toString(size));
                   }
               }
  +        } else {
               String delim = getDelimiter();
  -            if(delim != null) {
  -                StringTokenizer tokenizer = new 
StringTokenizer(result.toString(),delim);
  -                int len = 0;
  -                for (; tokenizer.hasMoreTokens(); len++) {
  -                     String token = tokenizer.nextToken();
  -                     getProject().setNewProperty(resultproperty + "." + len,
  -                            token);
  +            if (delim != null) {
  +                StringTokenizer tokenizer = new 
StringTokenizer(result.toString(),
  +                        delim);
  +                int size = 0;
  +                for (; tokenizer.hasMoreTokens();) {
  +                    String token = tokenizer.nextToken();
  +                    if(setProperty(propertyPrefix + "." + size, token)) {
  +                        size++;
  +                    }
                   }
  -                getProject().setNewProperty(resultproperty + ".length",
  -                        Integer.toString(len));                
  -            } else
  -                getProject().setNewProperty(resultproperty, 
result.toString());
  +                if(size>0)
  +                    setProperty(propertyPrefix + ".Length",
  +                        Integer.toString(size));
  +            } else {
  +                setProperty(propertyPrefix, result.toString());
  +            }
           }
       }
  -    
  +
  +    /**
  +     * @param propertyPrefix
  +     * @param value
  +     */
  +    protected boolean setProperty(String property, Object value) {
  +        if(property != null ) {
  +            if(value == null )
  +                 value="" ;
  +            if (isEcho()) {
  +                handleOutput(property + "=" + value.toString());
  +            }
  +            getProject().setNewProperty(property,value.toString());
  +            return true ;
  +        }
  +        return false ;
  +    }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to