You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2002/07/24 19:03:08 UTC

cvs commit: jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/model IncludeDescriptor.java

mcconnell    2002/07/24 10:03:07

  Modified:    assembly .cvsignore
               assembly/src/etc kernel.xml sevak.xml
               assembly/src/java/org/apache/excalibur/merlin/container
                        ResourceProvider.java
               assembly/src/java/org/apache/excalibur/merlin/kernel
                        ContainerClassLoader.java
               assembly/src/java/org/apache/excalibur/merlin/model
                        IncludeDescriptor.java
  Log:
  updates to classpath management in complex cases
  
  Revision  Changes    Path
  1.8       +1 -0      jakarta-avalon-excalibur/assembly/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/.cvsignore,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- .cvsignore	17 Jul 2002 13:48:37 -0000	1.7
  +++ .cvsignore	24 Jul 2002 17:03:06 -0000	1.8
  @@ -6,3 +6,4 @@
   kernel.log
   extensions
   velocity.log
  +sevak-conf.xml
  
  
  
  1.16      +1 -1      jakarta-avalon-excalibur/assembly/src/etc/kernel.xml
  
  Index: kernel.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/etc/kernel.xml,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- kernel.xml	20 Jul 2002 05:03:01 -0000	1.15
  +++ kernel.xml	24 Jul 2002 17:03:06 -0000	1.16
  @@ -21,7 +21,7 @@
      the corresponds to the name of the logging file.
      -->
   
  -   <logging priority="WARN" target="default">
  +   <logging priority="DEBUG" target="default">
         <target name="kernel">
           <file location="kernel.log" />
         </target>
  
  
  
  1.4       +0 -2      jakarta-avalon-excalibur/assembly/src/etc/sevak.xml
  
  Index: sevak.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/etc/sevak.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- sevak.xml	24 Jul 2002 16:57:51 -0000	1.3
  +++ sevak.xml	24 Jul 2002 17:03:06 -0000	1.4
  @@ -91,9 +91,7 @@
           </context>
   
           <!-- you need to provide your own sevak-conf.xml file if you want to override defaults -->
  -        <!-- e.g.: 
           <configuration src="sevak-conf.xml"/>
  -        -->
   
        </component>
   
  
  
  
  1.9       +2 -1      jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/container/ResourceProvider.java
  
  Index: ResourceProvider.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/container/ResourceProvider.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ResourceProvider.java	23 Jul 2002 15:10:40 -0000	1.8
  +++ ResourceProvider.java	24 Jul 2002 17:03:07 -0000	1.9
  @@ -127,6 +127,7 @@
           m_locator = locator;
           m_dictionary = new DefaultContext( dictionary );
           m_dictionary.put( "classloader", loader );
  +        m_dictionary.put( "home", new File( System.getProperty("user.dir") ) );
           m_dictionary.makeReadOnly();
       }
   
  
  
  
  1.6       +76 -8     jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/ContainerClassLoader.java
  
  Index: ContainerClassLoader.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/kernel/ContainerClassLoader.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ContainerClassLoader.java	20 Jul 2002 00:54:07 -0000	1.5
  +++ ContainerClassLoader.java	24 Jul 2002 17:03:07 -0000	1.6
  @@ -215,6 +215,15 @@
       protected void addURL( URL url )
       {
           super.addURL( url );
  +        checkForComponents( url );
  +    }
  +
  +   /**
  +    * Add a URL to the classpath.
  +    * @param url the URL to add to the classpath
  +    */
  +    protected void checkForComponents( URL url )
  +    {
           String[] entries = getBlocksEntries( url );
           for( int j=0; j<entries.length; j++ )
           {
  @@ -232,6 +241,7 @@
           }
       }
   
  +
       //===================================================================
       // TypeManager
       //===================================================================
  @@ -249,7 +259,8 @@
       {
   
           getLogger().debug( "adding classpath" );
  -        ArrayList list = new ArrayList();
  +        List list = new ArrayList();
  +        Vector stack = new Vector();
           File dir = new File( System.getProperty("user.dir") );
           FilesetDescriptor[] dirs = classpath.getFilesetDescriptors();
           for( int i=0; i<dirs.length; i++ )
  @@ -261,24 +272,81 @@
               {
                   File include = new File( base, includes[j].getFile() );
                   list.add( include.toURL() );
  +                stack.add( include );
               }
           }
  +        
           URL[] urls = (URL[]) list.toArray( new URL[0] );
  -        for( int i = 0; i < urls.length; i++ )
  -        {
  -            getLogger().info("adding: " + urls[i] );    
  -            addURL( urls[i] );
  -        }
           String[] path = urlsToStrings( urls );
           final File[] extensions = getOptionalPackagesFor( path );
           for( int i = 0; i < extensions.length; i++ )
           {
               URL url = extensions[ i ].toURL();
               getLogger().info("extension: " + extensions[ i ].toURL() ); 
  -            addURL( url );
  +            super.addURL( url );
  +        }
  +        load( stack );
  +        for( int i = 0; i < urls.length; i++ )
  +        {
  +            getLogger().info("adding: " + urls[i] );    
  +            checkForComponents( urls[i] );
           }
           getLogger().debug( "classpath addition complete" );
   
  +    }
  +
  +    /**
  +     * Load the supplied jar files under the pipeline classloader.
  +     * For each entry in the stack, try to load it and
  +     * if sucessfull, remove it from the stack - on completion
  +     * the stack should be less than its original size - recursivly
  +     * invoke load until the stack is empty.
  +     * @param stack a <code>Vector</code> containing a sequence of jar files
  +     *   to be added to the classloader.
  +     */
  +    private void load( Vector stack )
  +    {
  +        int size = stack.size();
  +        getLogger().debug( "Stack size: " + stack.size() );
  +        Hashtable errors = new Hashtable();
  +        Enumeration enum = stack.elements();
  +        while( enum.hasMoreElements() )
  +        {
  +            File file = (File)enum.nextElement();
  +            getLogger().debug( "Loading resource: " + file );
  +            try
  +            {
  +                super.addURL( file.toURL() );
  +                stack.remove( file );
  +            }
  +            catch( Throwable error )
  +            {
  +                getLogger().warn(
  +                        "Encountered error while loading resource: " + file, error );
  +                errors.put( file, error );
  +            }
  +        }
  +        if( stack.size() == 0 )
  +        {
  +            return;
  +        }
  +        if( stack.size() < size )
  +        {
  +            load( stack );
  +        }
  +        else
  +        {
  +            Enumeration keys = errors.keys();
  +            getLogger().error( "Load error count = " + errors.size() );
  +            while( keys.hasMoreElements() )
  +            {
  +                File key = (File)keys.nextElement();
  +                getLogger().error(
  +                    "Error while loading file."
  +                    + "\n\tfile: " + key.toString(), (Throwable)errors.get( key ) );
  +            }
  +            throw new RuntimeException( "Unable to load file stack - see trace for details." );
  +        }
       }
   
       private String[] urlsToStrings( URL[] urls )
  
  
  
  1.4       +2 -1      jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/model/IncludeDescriptor.java
  
  Index: IncludeDescriptor.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/assembly/src/java/org/apache/excalibur/merlin/model/IncludeDescriptor.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- IncludeDescriptor.java	14 Jul 2002 00:55:12 -0000	1.3
  +++ IncludeDescriptor.java	24 Jul 2002 17:03:07 -0000	1.4
  @@ -51,4 +51,5 @@
       {
           return m_file;
       }
  +
   }
  
  
  

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