mcconnell 2002/12/09 04:10:42 Modified: assembly/src/java/org/apache/avalon/assembly/engine EngineClassLoader.java Log: Updated to handle a wider range of launch scenarios. Revision Changes Path 1.4 +69 -15 avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/engine/EngineClassLoader.java Index: EngineClassLoader.java =================================================================== RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/engine/EngineClassLoader.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- EngineClassLoader.java 9 Dec 2002 03:03:47 -0000 1.3 +++ EngineClassLoader.java 9 Dec 2002 12:10:42 -0000 1.4 @@ -117,6 +117,7 @@ import org.apache.avalon.assembly.engine.model.ClasspathDescriptor; import org.apache.avalon.assembly.engine.model.FilesetDescriptor; import org.apache.avalon.assembly.engine.model.IncludeDescriptor; +import org.apache.avalon.assembly.engine.model.ClasspathDescriptor; import org.apache.excalibur.mpool.DefaultPoolManager; import org.apache.excalibur.mpool.PoolManager; import org.apache.excalibur.event.command.CommandManager; @@ -214,6 +215,11 @@ private LibraryDescriptor m_descriptor; /** + * Classpath descriptor. + */ + private ClasspathDescriptor m_classpath; + + /** * The set of facilities. */ private Map m_facilities = new Hashtable(); @@ -238,7 +244,7 @@ //======================================================================= /** - * Creation of a new type manager using. + * Creation of a new engine. */ public EngineClassLoader() { @@ -246,6 +252,20 @@ m_graph = new DependencyGraph(); } + /** + * Creation of a new engine with a partner + */ + public EngineClassLoader( EngineClassLoader parent ) + { + super( new URL[ 0 ], parent ); + m_graph = new DependencyGraph( parent.getDependencyGraph() ); + } + + protected DependencyGraph getDependencyGraph() + { + return m_graph; + } + //======================================================================= // LogEnabled //======================================================================= @@ -309,7 +329,7 @@ try { - m_descriptor = (LibraryDescriptor)context.get( "urn:assembly:extensions.descriptor" ); + m_descriptor = (LibraryDescriptor)context.get( "urn:assembly:engine.extensions" ); } catch( ContextException e ) { @@ -318,6 +338,15 @@ try { + m_classpath = (ClasspathDescriptor)context.get( "urn:assembly:engine.classpath" ); + } + catch( ContextException e ) + { + m_classpath = new ClasspathDescriptor(); + } + + try + { m_home = (File)context.get( "urn:avalon:home" ); } catch( ContextException e ) @@ -400,11 +429,11 @@ // ArrayList list = new ArrayList(); - File anchor = new File( m_home, m_descriptor.getBaseDirectory() ); + File anchor = new File( m_home, m_descriptor.getBaseDirectory() ).getCanonicalFile(); IncludeDescriptor[] includes = m_descriptor.getIncludeDescriptors(); for( int j = 0; j < includes.length; j++ ) { - File include = new File( anchor, includes[ j ].getFile() ); + File include = new File( anchor, includes[ j ].getFile() ).getCanonicalFile(); if( include.isDirectory() ) { list.add( include ); @@ -425,7 +454,7 @@ while( tokenizer.hasMoreTokens() ) { String token = tokenizer.nextToken(); - File test = new File( token ); + File test = new File( token ).getCanonicalFile(); if( test.exists() ) { list.add( test ); @@ -436,7 +465,7 @@ } else { - File file = new File( m_home, token ); + File file = new File( m_home, token ).getCanonicalFile(); if( file.exists() ) { list.add( file ); @@ -486,7 +515,7 @@ while( tokenizer.hasMoreTokens() ) { String token = tokenizer.nextToken(); - URL url = new File( token ).toURL(); + URL url = new File( token ).getCanonicalFile().toURL(); if( getLogger().isDebugEnabled() ) { getLogger().debug( "path: " + url ); @@ -495,6 +524,20 @@ } } + // + // load the classpath + // + + try + { + addClasspath( m_classpath ); + } + catch( Throwable e ) + { + final String error = "Classpath deployment failure."; + throw new EngineException( error, e ); + } + if( getLogger().isDebugEnabled() ) { getLogger().debug( "ready" ); @@ -543,13 +586,24 @@ for( int i = 0; i < dirs.length; i++ ) { FilesetDescriptor descriptor = dirs[ i ]; - File anchor = new File( m_home, descriptor.getBaseDirectory() ); - if( !anchor.exists() ) + File anchor; + try + { + anchor = new File( m_home, descriptor.getBaseDirectory() ).getCanonicalFile(); + if( !anchor.exists() ) + { + final String error = + "Classpath base directory does not exist: " + + anchor; + throw new EngineRuntimeException( error ); + } + } + catch( Throwable e ) { - final String error = - "Classpath base directory does not exist: " - + anchor; - throw new EngineRuntimeException( error ); + final String error = + "Error processing a classpath bae directory: " + + descriptor; + throw new EngineRuntimeException( error, e ); } IncludeDescriptor[] includes = descriptor.getIncludeDescriptors(); @@ -558,7 +612,7 @@ String inc = includes[ j ].getFile(); try { - addURL( new File( anchor, inc ).toURL() ); + addURL( new File( anchor, inc ).getCanonicalFile().toURL() ); } catch( Throwable e ) {
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>