donaldp     02/03/21 01:10:48

  Modified:    src/java/org/apache/avalon/phoenix/components/classloader
                        DefaultClassLoaderManager.java
  Log:
  Make class Contextualizable and retrieve the common classLoader from the 
context. Use the common classloader as parent classLoader of all applications
  
  Revision  Changes    Path
  1.24      +34 -6     
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/classloader/DefaultClassLoaderManager.java
  
  Index: DefaultClassLoaderManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/components/classloader/DefaultClassLoaderManager.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- DefaultClassLoaderManager.java    21 Mar 2002 08:18:33 -0000      1.23
  +++ DefaultClassLoaderManager.java    21 Mar 2002 09:10:48 -0000      1.24
  @@ -26,6 +26,9 @@
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
  +import org.apache.avalon.framework.context.Contextualizable;
  +import org.apache.avalon.framework.context.ContextException;
  +import org.apache.avalon.framework.context.Context;
   import org.apache.avalon.phoenix.interfaces.ClassLoaderManager;
   import org.apache.avalon.phoenix.interfaces.PackageRepository;
   
  @@ -42,16 +45,45 @@
    * <code>ClassLoader</code></p>
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
  + * @see ClassLoaderManager
    */
   public class DefaultClassLoaderManager
       extends AbstractLogEnabled
  -    implements ClassLoaderManager, Composable
  +    implements ClassLoaderManager, Contextualizable, Composable
   {
       private static final Resources REZ =
           ResourceManager.getPackageResources( DefaultClassLoaderManager.class 
);
   
  +    /**
  +     * Component to manage "Optional Packages" aka
  +     * Extensions to allow programs to declare dependencies
  +     * on such extensions.
  +     */
       private PackageManager m_packageManager;
   
  +    /**
  +     * Parent ClassLoader for all applications
  +     * aka as the "common" classloader.
  +     */
  +    private ClassLoader m_commonClassLoader;
  +
  +    /**
  +     * Pass the Context to the Manager.
  +     * It is expected that the there will be an entry
  +     * <ul>
  +     *   <b>common.classloader</b> : ClassLoader shared betweeen
  +     *      container and applications</li>
  +     * </ul>
  +     *
  +     * @param context the context
  +     * @exception ContextException if context does not contain common 
classloader
  +     */
  +    public void contextualize( Context context )
  +        throws ContextException
  +    {
  +        m_commonClassLoader = (ClassLoader)context.get( "common.classloader" 
);
  +    }
  +
       public void compose( final ComponentManager componentManager )
           throws ComponentException
       {
  @@ -98,9 +130,6 @@
               getLogger().debug( message );
           }
   
  -        //TODO: Determine parentClassLoader in a safer fashion
  -        final ClassLoader parentClassLoader = 
Thread.currentThread().getContextClassLoader();
  -
           //If source is not a file then there will be no need to pass in
           //a URLStreamHandler factory anyway so we can just pass in null
           //SarURLStreamHandlerFactory factory = null;
  @@ -110,9 +139,8 @@
           //factory = new SarURLStreamHandlerFactory( archive );
           //URL.setURLStreamHandlerFactory( factory );
           //}
  -
           final PolicyClassLoader classLoader =
  -            new PolicyClassLoader( classPath, parentClassLoader, null, 
policy );
  +            new PolicyClassLoader( classPath, m_commonClassLoader, null, 
policy );
           setupLogger( classLoader, "classloader" );
   
           for( int i = 0; i < extensions.length; i++ )
  
  
  

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

Reply via email to