User: juhalindfors
  Date: 02/03/17 02:35:55

  Modified:    src/main/javax/management/loading MLet.java
  Log:
  unified classloader support
  
  Revision  Changes    Path
  1.8       +73 -4     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.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- MLet.java 13 Mar 2002 14:44:53 -0000      1.7
  +++ MLet.java 17 Mar 2002 10:35:55 -0000      1.8
  @@ -32,6 +32,11 @@
   import org.jboss.mx.loading.MBeanFileParser;
   import org.jboss.mx.loading.MLetParser;
   import org.jboss.mx.loading.MBeanElement;
  +import org.jboss.mx.loading.LoaderRepository;
  +import org.jboss.mx.loading.UnifiedClassLoader;
  +import org.jboss.mx.loading.UnifiedLoaderRepository;
  +
  +import org.jboss.mx.server.ServerConstants;
   
   /**
    * URL classloader capable of parsing an MLet text file adhering to the file
  @@ -40,7 +45,7 @@
    * @see javax.management.loading.MLetMBean
    *
    * @author  <a href="mailto:[EMAIL PROTECTED]";>Juha Lindfors</a>.
  - * @version $Revision: 1.7 $  
  + * @version $Revision: 1.8 $  
    *
    * <p><b>Revisions:</b>
    *
  @@ -48,14 +53,34 @@
    * <ul>
    * <li> Added MLet text file ARG tag support </li>
    * </ul>
  + *
  + * <p><b>20020317 Juha Lindfors:</b>
  + * <ul>
  + * <li> Unified Loader Repository support </li>
  + * 
  + * <li> We need to intercept addURL() call since MLet CL exposes this as a
  + *      public method (unlike URL CL). This means the set of URLs in this
  + *      classloaders scope may change after it has been registered to the
  + *      repository. </li>
  + *
  + * <li> We override loadClass() to delegate class loading directly to the
  + *      repository in case a Unified Loader Repository is installed. This means
  + *      in case of ULR this classloader is never used to load classes. The ULR
  + *      has a set of Unified CLs that match the URLs added to this CL. </li>
  + * </ul>
    */
   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.
  +   // FIXME: (RI javadoc) Note -  The MLet class loader uses the 
DefaultLoaderRepository
  +   //        to load classes that could not be found in the loaded jar files.
  +   //
  +   // IOW we need to override findClass for this cl...
  +   // I think we can avoid the ugly dlr field hack from RI
   
  +   
      // Attributes ----------------------------------------------------
      /** Reference to the MBean server this loader is registered to. */
      private MBeanServer server    = null;
  @@ -162,6 +187,12 @@
                  
               try
               {
  +               // FIXME: see the note at the beginning... we use an explicit loader
  +               //        in the createMBean() call to force this classloader to
  +               //        be used first to load all MLet classes. Normally this form
  +               //        of createMBean() call will not delegate to DLR even though
  +               //        the javadoc requires it. Therefore the findClass() should
  +               //        be overridden to delegate to the repository. 
                  mbeans.add(server.createMBean(
                        element.getCode(),
                        (element.getName() != null) ? new 
ObjectName(element.getName()) : null,
  @@ -190,14 +221,28 @@
   
      public void addURL(URL url)
      {
  -      super.addURL(url);
  +      if 
(System.getProperty(ServerConstants.LOADER_REPOSITORY_CLASS_PROPERTY).equals(
  +            ServerConstants.UNIFIED_LOADER_REPOSITORY_CLASS))
  +      {
  +         // since we don't have the URLs til getMBeansFromURL() is called we
  +         // need to add these UCLs late, after the MBean registration
  +         LoaderRepository.getDefaultLoaderRepository().addClassLoader(new 
UnifiedClassLoader(url));
  +      }
  +         
  +      else
  +      {
  +         // will probably override to add individual URL CL to repository as well
  +         // in the same style as with ULR. This would allow findClass() to safely
  +         // delegate to the BLR without having to deal with infinite looping.
  +         super.addURL(url);
  +      }
      }
   
      public void addURL(String url) throws ServiceNotFoundException
      {
         try
         {
  -         super.addURL(new URL(url));
  +         this.addURL(new URL(url));
         }
         catch (MalformedURLException e)
         {
  @@ -207,13 +252,37 @@
   
      public String getLibraryDirectory()
      {
  +      // FIXME
         throw new Error("NYI");
      }
   
      public void setLibraryDirectory(String libdir)
      {
  +      // FIXME
         throw new Error("NYI");
      }
      
  +   // Classloader overrides -----------------------------------------
  +   public Class loadClass(String name, boolean resolve) throws 
ClassNotFoundException
  +   {      
  +      if 
(System.getProperty(ServerConstants.LOADER_REPOSITORY_CLASS_PROPERTY).equals(
  +               ServerConstants.UNIFIED_LOADER_REPOSITORY_CLASS))
  +      {
  +         // if its ULR we can safely delegate the load to it because only a single
  +         // definition of a given class exists in the repository. This cl has
  +         // conflicting definitions and therefore we skip it altogether.
  +         UnifiedLoaderRepository ulr = 
(UnifiedLoaderRepository)LoaderRepository.getDefaultLoaderRepository();
  +         return ulr.loadClass(name, resolve, 
Thread.currentThread().getContextClassLoader());
  +      }
  +      
  +      else
  +      {
  +         // with BLR multiple class definitions by different classloaders can
  +         // exist... therefore try loadClass with this CL first, if it fails
  +         // delegate to loader repository
  +         return super.loadClass(name, resolve);
  +      }
  +   }
  +      
   }
   
  
  
  

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

Reply via email to