User: juhalindfors
  Date: 02/02/15 04:23:11

  Modified:    src/main/javax/management/loading MLet.java
  Log:
  MLet text file parses separated to a class of its own. MBean loader parsers
  can be accessed through the MBeanFileParser interface.
  
  Revision  Changes    Path
  1.6       +47 -177   jmx/src/main/javax/management/loading/MLet.java
  
  Index: MLet.java
  ===================================================================
  RCS file: /cvsroot/jboss/jmx/src/main/javax/management/loading/MLet.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- MLet.java 5 Feb 2002 16:20:45 -0000       1.5
  +++ MLet.java 15 Feb 2002 12:23:11 -0000      1.6
  @@ -27,18 +27,32 @@
   import java.util.Iterator;
   import java.util.NoSuchElementException;
   
  +import java.text.ParseException;
  +
  +import org.jboss.mx.loading.MBeanFileParser;
  +import org.jboss.mx.loading.MLetParser;
  +import org.jboss.mx.loading.MBeanElement;
  +
   /**
  + * URL classloader capable of parsing an MLet text file adhering to the file
  + * format defined in the JMX specification (v1.0).
  + *
  + * @see javax.management.loading.MLetMBean
    *
    * @author  <a href="mailto:[EMAIL PROTECTED]";>Juha Lindfors</a>.
  - * @version $Revision: 1.5 $  
  + * @version $Revision: 1.6 $  
    */
   public class MLet 
      extends URLClassLoader 
      implements MLetMBean, MBeanRegistration
   {
   
  +   // FIXME: (RI javadoc) Note -  The MLet class loader uses the 
DefaultLoaderRepository  to load classes that could not be found in the loaded jar 
files.
  +
      // Attributes ----------------------------------------------------
  +   /** Reference to the MBean server this loader is registered to. */
      private MBeanServer server    = null;
  +   /** Object name of this loader. */
      private ObjectName objectName = null;
      
      // Constructors --------------------------------------------------
  @@ -83,7 +97,7 @@
      public void postDeregister()
      {}
   
  -   // Public --------------------------------------------------------
  +   // MLetMBean implementation --------------------------------------
      public Set getMBeansFromURL(String url) throws ServiceNotFoundException
      {
         try
  @@ -99,147 +113,50 @@
      public Set getMBeansFromURL(URL url) throws ServiceNotFoundException
      {
         if (server == null)
  -         throw new ServiceNotFoundException("MLet must be registered to the server 
before loading the MBeans.");
  +         throw new ServiceNotFoundException("Loader must be registered to the 
server before loading the MBeans.");
   
  -      HashSet mlets         = new HashSet(); 
         HashSet mbeans        = new HashSet();
  -      MLetEntry entry       = null;
  -      try
  -      {         
  -         BufferedReader reader = new BufferedReader(new 
InputStreamReader(url.openStream()));
  -         int c                 = -1;
  -      
  -         while((c = reader.read()) != -1)
  -         {
  -            if (c == '<')
  -            {            
  -               StringBuffer buf = new StringBuffer(1000);
  -               boolean readMore = true;
  -               
  -               while(readMore)
  -               {
  -                  c = reader.read();
  -                  
  -                  if (c == -1)
  -                     throw new IOException("Unexpected end of file. Tag was not 
closed: " + buf.toString());
  -                  
  -                  if (c == '>')
  -                  {
  -                     readMore = false;
  -                     break;
  -                  }
  -                  
  -                  buf.append((char)c);
  -               }
  +      MBeanElement element  = null;
   
  -               StringTokenizer tokenizer = new StringTokenizer(buf.toString(), "= 
\n\t\r");
  -               String tagName = null, attributeName = null, attributeValue = null;
  -               
  -               if (tokenizer.hasMoreTokens())
  -                  tagName = tokenizer.nextToken().trim();
  -               
  -               if (tagName.equals("MLET"))
  -               {
  -                  entry = new MLetEntry();
  -                  
  -                  while(tokenizer.hasMoreTokens())
  -                  {
  -                     try
  -                     {
  -                        attributeName = tokenizer.nextToken("= \n\t\r").trim();
  -                        attributeValue = tokenizer.nextToken(" \n\t\r").trim();
  -                     
  -                        if (attributeValue.equals("="))
  -                           attributeValue = tokenizer.nextToken();
  -                        else
  -                           attributeValue = attributeValue.substring(1, 
attributeValue.length());
  -                        
  -                        if (attributeName.equals("CODE"))
  -                           entry.code = trimQuotes(attributeValue);
  -                        else if (attributeName.equals("OBJECT"))
  -                           entry.object = trimQuotes(attributeValue);
  -                        else if (attributeName.equals("ARCHIVE"))
  -                           // FIXME: "archivelist" must be in quotes
  -                           entry.archive = trimQuotes(attributeValue);
  -                        else if (attributeName.equals("CODEBASE"))
  -                           entry.codebase = trimQuotes(attributeValue);
  -                        else if (attributeName.equals("NAME"))
  -                           entry.name = trimQuotes(attributeValue);
  -                        else if (attributeName.equals("VERSION"))
  -                           entry.version = trimQuotes(attributeValue);
  -                     }
  -                     catch (NoSuchElementException e)
  -                     {
  -                        // couldn't find a valid attribute, value pair
  -                        // ignore and move one
  -                        
  -                        // FIXME: log this somewhere
  -                        System.out.println("No value found for attribute '" + 
attributeName);
  -                     }
  -                  }
  -                  
  -                  if (entry.code == null && entry.object == null)
  -                     throw new ServiceNotFoundException("<" + 
buf.toString().replace('\n', ' ').replace('\r', ' ').replace('\t', ' ').trim() + "> is 
missing mandatory CODE | OBJECT attribute");
  -                  if (entry.archive == null)
  -                     throw new ServiceNotFoundException("<" + 
buf.toString().replace('\n', ' ').replace('\r', ' ').replace('\t', ' ').trim() + "> is 
missing mandatory ARCHIVE attribute");
  -               }
  -                  
  -               else if (tagName.equals("/MLET"))
  -               {                     
  -                  mlets.add(entry);
  -                  entry = null;
  -               }
  -               
  -               else if (tagName.equals("ARG"))
  -               {
  -                  try
  -                  {
  -                     if (!tokenizer.nextToken().equals("TYPE"))
  -                        continue;
  -                        
  -                     String name = tokenizer.nextToken();
  -                     
  -                     if (!tokenizer.nextToken().equals("VALUE"))
  -                        continue;
  -                        
  -                     String value = tokenizer.nextToken(" \n\t\r");
  -                     
  -                     if (entry != null)
  -                        entry.args.add(new String[] { name, value });
  -                  }
  -                  catch (NoSuchElementException e)
  -                  {
  -                     // malformed ARG tag means the MBean can't be instantiated
  -                     // bogus class name will fail in createMBean
  -                     entry.args.add(new String[] { "MalformedARG", "" });
  -                     
  -                     // FIXME: log this
  -                     System.out.println("Malformed element: <" + buf.toString() + 
">");
  -                  }
  -               }               
  -            }  // end of if (c == '<')
  -         }  // while((c = reader.read()) != -1) 
  +      try 
  +      {
  +         MBeanFileParser parser = new MLetParser();
  +         Set mlets              = parser.parseMBeanFile(url);
            
            if (mlets.size() == 0)
               throw new ServiceNotFoundException("The specified URL '" + url + "' 
does not contain MLET tags.");
               
            Iterator it = mlets.iterator();
  -         while(it.hasNext())
  +         while (it.hasNext())
            {
  -            entry = (MLetEntry)it.next();
  -            StringTokenizer tokenizer = new StringTokenizer(entry.archive, ", ");
  +            element = (MBeanElement)it.next();
  +            String codebase = element.getCodebase();
               
               // if no codebase is specified then the url of the mlet text file is 
used
  -            if (entry.codebase == null)
  -               entry.codebase = url.toString().substring(0, 
url.toString().lastIndexOf('/'));
  -               
  -            while(tokenizer.hasMoreElements())
  -               addURL(new URL(entry.codebase + ((entry.codebase.endsWith("/")) ? "" 
: "/") + tokenizer.nextToken()));
  +            if (codebase == null)
  +               codebase = url.toString().substring(0, 
url.toString().lastIndexOf('/'));
  +
  +            Iterator archives  = element.getArchives().iterator();
  +            String codebaseURL = null;
  +            
  +            while(archives.hasNext())
  +            {
  +               try
  +               {
  +                  codebaseURL = codebase + ((codebase.endsWith("/")) ? "" : "/") + 
archives.next();
  +                  addURL(new URL(codebaseURL));
  +               }
  +               catch (MalformedURLException e)
  +               {
  +                  // FIXME: log it
  +                  System.out.println("MLET ERROR: malformed codebase URL: '" + 
codebaseURL + "'");
  +               }
  +            }
                  
               try
               {
                  // FIXME: create with args!
  -               mbeans.add(server.createMBean(entry.code, (entry.name != null) ? new 
ObjectName(entry.name) : null, objectName));
  +               mbeans.add(server.createMBean(element.getCode(), (element.getName() 
!= null) ? new ObjectName(element.getName()) : null, objectName));
               }
               catch (Throwable t)
               {
  @@ -251,9 +168,9 @@
               }            
            }
         }
  -      catch (IOException e) 
  +      catch (ParseException e) 
         {
  -         throw new ServiceNotFoundException(e.toString());
  +         throw new ServiceNotFoundException(e.getMessage());
         }
            
         return mbeans;
  @@ -276,22 +193,6 @@
         }
      }
   
  -   public URL[] getURLs()
  -   {
  -      return super.getURLs();
  -   }
  -
  -   public URL getResource(String name)
  -   {
  -      return super.getResource(name);
  -   }
  -
  -   public InputStream getResourceAsStream(String name)
  -   {
  -      return super.getResourceAsStream(name);
  -   }
  -
  -
      public String getLibraryDirectory()
      {
         throw new Error("NYI");
  @@ -302,36 +203,5 @@
         throw new Error("NYI");
      }
      
  -   // Private -------------------------------------------------------
  -   private String trimQuotes(String str) 
  -   {
  -      if (str.startsWith("\"") && str.endsWith("\""))
  -         return str.substring(1, str.length() - 1);
  -      else
  -         return str;
  -   }
  -
  -   // Inner classes -------------------------------------------------
  -   private class MLetEntry
  -   {
  -      String code       = null;
  -      String object     = null;
  -      String archive    = null;
  -      String codebase   = null;
  -      String name       = null;
  -      String version    = null;
  -      Set    args       = new HashSet();
  -      
  -      public String toString()
  -      {
  -         return "MLET:\n" +
  -                  "   CODE    =" + code + "\n" +
  -                  "   OBJECT  =" + object + "\n" +
  -                  "   ARCHIVE =" + archive + "\n" +
  -                  "   CODEBASE=" + codebase + "\n" +
  -                  "   NAME    =" + name + "\n" +
  -                  "   VERSION =" + version + "\n";
  -      }
  -   }
   }
   
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to