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>