You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by co...@apache.org on 2002/12/26 19:15:49 UTC

cvs commit: jakarta-commons/modeler/src/java/org/apache/commons/modeler/modules MbeansDescriptorsDOMSource.java

costin      2002/12/26 10:15:49

  Added:       modeler/src/java/org/apache/commons/modeler/modules
                        MbeansDescriptorsDOMSource.java
  Log:
  Read mbean-descriptors using only DOM.
  
  All my tests show the performance is the same or better - most likely
  due to the fact that the memory overhead of DOM is compensated by
  direct invocation ( instead of introspection ). It is also a small factor
  ( since we have the same overhead - we create our own tree ).
  
  This needs to be used only when modeler is in the top loader and
  we want minimal jars there.
  
  Revision  Changes    Path
  1.1                  jakarta-commons/modeler/src/java/org/apache/commons/modeler/modules/MbeansDescriptorsDOMSource.java
  
  Index: MbeansDescriptorsDOMSource.java
  ===================================================================
  package org.apache.commons.modeler.modules;
  
  import org.w3c.dom.Document;
  import org.w3c.dom.Node;
  import org.apache.commons.modeler.util.DomUtil;
  import org.apache.commons.modeler.*;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  
  import java.io.InputStream;
  
  
  public class MbeansDescriptorsDOMSource extends Registry.DescriptorSource
  {
      private static Log log = LogFactory.getLog(MbeansDescriptorsDOMSource.class);
  
      public void loadDescriptors( Registry registry, String location,
                                   String type, InputStream stream)
          throws Exception
      {
          try {
              long t1=System.currentTimeMillis();
              Document doc=DomUtil.readXml(stream);
              // Ignore for now the name of the root element
              Node descriptorsN=doc.getDocumentElement();
              //Node descriptorsN=DomUtil.getChild(doc, "mbeans-descriptors");
              if( descriptorsN == null ) {
                  log.error("No descriptors found");
                  return;
              }
  
              Node firstMbeanN=null;
              if( "mbean".equals( descriptorsN.getNodeName() ) ) {
                  firstMbeanN=descriptorsN;
              } else {
                  firstMbeanN=DomUtil.getChild(descriptorsN, "mbean");
              }
  
              if( firstMbeanN==null ) {
                  log.error(" No mbean tags ");
                  return;
              }
  
              for (Node mbeanN = firstMbeanN; mbeanN != null;
                   mbeanN= DomUtil.getNext(mbeanN))
              {
                  ManagedBean managed=new ManagedBean();
                  DomUtil.setAttributes(managed, mbeanN);
                  Node firstN;
  
                  // process attribute info
                  firstN=DomUtil.getChild( mbeanN, "attribute");
                  for (Node descN = firstN; descN != null;
                       descN = DomUtil.getNext( descN ))
                  {
                      AttributeInfo ci=new AttributeInfo();
                      DomUtil.setAttributes(ci, descN);
                      managed.addAttribute( ci );
                  }
                  // process constructor info
                  firstN=DomUtil.getChild( mbeanN, "constructor");
                  for (Node descN = firstN; descN != null;
                       descN = DomUtil.getNext( descN ))
                  {
                      ConstructorInfo ci=new ConstructorInfo();
                      DomUtil.setAttributes(ci, descN);
  
                      Node firstParamN=DomUtil.getChild( descN, "parameter");
                      for (Node paramN = firstParamN;  paramN != null;
                           paramN = DomUtil.getNext(paramN))
                      {
                          ParameterInfo pi=new ParameterInfo();
                          DomUtil.setAttributes(pi, paramN);
                          ci.addParameter( pi );
                      }
                      managed.addConstructor( ci );
                  }
                  // process method info
                  firstN=DomUtil.getChild( mbeanN, "operation");
                  for (Node descN = firstN; descN != null;
                       descN = DomUtil.getNext( descN ))
                  {
                      OperationInfo ci=new OperationInfo();
                      DomUtil.setAttributes(ci, descN);
  
                      Node firstParamN=DomUtil.getChild( descN, "parameter");
                      for (Node paramN = firstParamN;  paramN != null;
                           paramN = DomUtil.getNext(paramN))
                      {
                          ParameterInfo pi=new ParameterInfo();
                          DomUtil.setAttributes(pi, paramN);
                          if( log.isTraceEnabled())
                              log.trace("Add param " + pi.getName());
                          ci.addParameter( pi );
                      }
                      managed.addOperation( ci );
                      if( log.isTraceEnabled())
                          log.trace("Create operation " + ci.getName());
                  }
                  // process notificatio info
                  firstN=DomUtil.getChild( mbeanN, "notification");
                  for (Node descN = firstN; descN != null;
                       descN = DomUtil.getNext( descN ))
                  {
                      NotificationInfo ci=new NotificationInfo();
                      DomUtil.setAttributes(ci, descN);
                      managed.addNotification( ci );
  
                      Node firstParamN=DomUtil.getChild( descN, "notification-type");
                      for (Node paramN = firstParamN;  paramN != null;
                           paramN = DomUtil.getNext(paramN))
                      {
                          ci.addNotifType( DomUtil.getContent(paramN) );
                      }
                  }
  
                  registry.addManagedBean(managed);
              }
  
              long t2=System.currentTimeMillis();
              log.info( "Reading descriptors ( dom ) " + (t2-t1));
          } catch( Exception ex ) {
              log.error( "Error reading descriptors ", ex);
          }
      }
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>