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 2003/01/06 02:13:40 UTC
cvs commit: avalon-sandbox/merlin/src/java/org/apache/avalon/merlin/kernel KernelLoader.java
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: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>