mcconnell 2003/01/05 17:13:40 Added: merlin/src/java/org/apache/avalon/merlin/kernel KernelLoader.java Log: Updates to eliminate dependency on extension directories during bootstrap enabling support for java WebStart. Revision Changes Path 1.1 avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/kernel/KernelLoader.java Index: KernelLoader.java =================================================================== package org.apache.avalon.merlin.kernel; import java.io.File; import java.io.IOException; import java.io.FileInputStream; import java.io.InputStream; import java.io.IOException; import java.io.FileNotFoundException; import java.util.StringTokenizer; import java.util.Enumeration; import java.util.List; import java.util.Iterator; import java.util.jar.JarFile; import java.util.ArrayList; import java.util.Map; import java.util.jar.Attributes; import java.util.jar.Manifest; import java.net.URLClassLoader; import java.net.URL; import java.util.zip.ZipEntry; import java.net.MalformedURLException; import java.net.JarURLConnection; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder; import org.apache.avalon.framework.context.Context; import org.apache.avalon.framework.context.DefaultContext; import org.apache.avalon.framework.context.Contextualizable; import org.apache.avalon.framework.context.ContextException; import org.apache.avalon.merlin.block.Block; import org.apache.avalon.merlin.block.DefaultBlock; import org.apache.avalon.merlin.kernel.Kernel; import org.apache.avalon.merlin.kernel.DefaultKernel; import org.apache.avalon.merlin.kernel.KernelException; import org.apache.avalon.assembly.util.ExceptionHelper; /** * Merlin commandline bootstrap handler. * @see DefaultKernel */ public class KernelLoader { private DefaultKernel m_kernel; public KernelLoader( ClassLoader loader, File base ) { try { m_kernel = new DefaultKernel(); } catch( Throwable e ) { final String error = "\nUnexpected exception while attempting to load kernel loader from classloader: " + loader + " with parent: " + loader.getParent(); e.printStackTrace(); throw new KernelRuntimeException( error, e ); } try { Runtime.getRuntime().addShutdownHook( new Thread() { public void run() { try { m_kernel.stop(); } catch( Throwable e ) { // ignore it } finally { m_kernel.dispose(); } } } ); } catch( IllegalStateException ise ) { if( m_kernel != null ) { try { m_kernel.stop(); } catch( Throwable e ) { // ignore it } finally { m_kernel.dispose(); } } return; } DefaultContext context = new DefaultContext(); context.put( "urn:assembly:home", base ); context.put( "urn:avalon:classloader", loader ); context.makeReadOnly(); try { m_kernel.contextualize( context ); m_kernel.initialize(); m_kernel.start(); } catch( KernelException e ) { // its already been logged System.err.println( e.toString() ); } catch( Throwable e ) { final String error = "Controller deployment failure."; String message = ExceptionHelper.packException( error, e ); System.err.println( message ); m_kernel.dispose(); } } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>