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 2004/01/07 17:07:17 UTC

cvs commit: avalon/merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl DefaultFactory.java DefaultKernel.java

mcconnell    2004/01/07 08:07:17

  Modified:    merlin/activation/impl/src/java/org/apache/avalon/activation/appliance/impl
                        Tag: Ver_3_4 AbstractBlock.java Deployer.java
               merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl
                        Tag: Ver_3_4 DefaultFactory.java DefaultKernel.java
  Log:
  Synchronize merlin kernel with activation.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.10.2.4  +3 -1      avalon/merlin/activation/impl/src/java/org/apache/avalon/activation/appliance/impl/AbstractBlock.java
  
  Index: AbstractBlock.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/activation/impl/src/java/org/apache/avalon/activation/appliance/impl/AbstractBlock.java,v
  retrieving revision 1.10.2.3
  retrieving revision 1.10.2.4
  diff -u -r1.10.2.3 -r1.10.2.4
  --- AbstractBlock.java	7 Jan 2004 12:57:25 -0000	1.10.2.3
  +++ AbstractBlock.java	7 Jan 2004 16:07:17 -0000	1.10.2.4
  @@ -292,6 +292,7 @@
               ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
               ClassLoader classloader = model.getClassLoaderModel().getClassLoader();
               Thread.currentThread().setContextClassLoader( classloader );
  +
               Deployer deployer = 
                 new Deployer( getLogger().getChildLogger( "deployer" ) );
   
  @@ -310,6 +311,7 @@
                   // restore the Old ContextClassloader.
                   Thread.currentThread().setContextClassLoader( oldCL );
               }
  +
               m_deployment.setEnabled( true );
           }
       }
  
  
  
  1.2.2.2   +22 -11    avalon/merlin/activation/impl/src/java/org/apache/avalon/activation/appliance/impl/Deployer.java
  
  Index: Deployer.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/activation/impl/src/java/org/apache/avalon/activation/appliance/impl/Deployer.java,v
  retrieving revision 1.2.2.1
  retrieving revision 1.2.2.2
  diff -u -r1.2.2.1 -r1.2.2.2
  --- Deployer.java	7 Jan 2004 12:57:25 -0000	1.2.2.1
  +++ Deployer.java	7 Jan 2004 16:07:17 -0000	1.2.2.2
  @@ -56,10 +56,14 @@
   
   import org.apache.avalon.framework.logger.Logger;
   
  -/**
  - * Runnable deployment thread.
  + * Runnable deployment thread that handles the deployment of an 
  + * arbitary number of deployable instances.  The deployer maintains a 
  + * list of deployment requests which are queued on a first come first 
  + * serve basis.
  + *
    * @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
    * @version $Revision$ $Date$
  + * @see DeploymentRequest
    */
   class Deployer
       implements Runnable
  @@ -101,16 +105,23 @@
       // implementation
       //------------------------------------------------------------
   
  -    /** Deploys the given Deployable, and allows a maximum time
  -     *  for the deployment to complete.
  -     * @throws DeploymentException if the deployment hanged, but the
  -     * thread interruption was successful.
  -     * @throws FatalDeploymentException if the deployment hanged, and
  -     * the thread interruption failed.
  -     * @throws Exception any Exception or Error thrown by within the
  -     * deployment of the component is forwarded to the caller.
  +    /** 
  +     * Deploys the given Deployable, and allows a maximum time
  +     * for the deployment to complete.
  +     *
  +     * @param deployable the deployable appliance
  +     * @param timeout the maximum time to allow for deployment
  +     *
  +     * @throws DeploymentException if the deployment was not 
  +     *   completed within the timeout deadline and interuption
  +     *   of the deployment was successful
  +     * @throws FatalDeploymentException if the deployment was not 
  +     *   completed within the timeout deadline and interuption
  +     *   of the deployment was not successful
  +     * @throws Exception any Exception or Error thrown within the
  +     *   deployment of the component is forwarded to the caller.
        * @throws InvocationTargetException if the deployment throws a
  -     * Throwable subclass that is NOT of type Exception or Error.
  +     *   Throwable subclass that is NOT of type Exception or Error.
        **/
       void deploy( Deployable deployable, long timeout )
           throws Exception
  
  
  
  No                   revision
  No                   revision
  1.7.2.4   +41 -73    avalon/merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl/DefaultFactory.java
  
  Index: DefaultFactory.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl/DefaultFactory.java,v
  retrieving revision 1.7.2.3
  retrieving revision 1.7.2.4
  diff -u -r1.7.2.3 -r1.7.2.4
  --- DefaultFactory.java	4 Jan 2004 17:23:17 -0000	1.7.2.3
  +++ DefaultFactory.java	7 Jan 2004 16:07:17 -0000	1.7.2.4
  @@ -61,9 +61,7 @@
   
   import org.apache.avalon.activation.appliance.Block;
   import org.apache.avalon.activation.appliance.BlockContext;
  -import org.apache.avalon.activation.appliance.Composite;
   import org.apache.avalon.activation.appliance.impl.AbstractBlock;
  -import org.apache.avalon.activation.appliance.impl.DefaultServiceContext;
   
   import org.apache.avalon.composition.data.ContainmentProfile;
   import org.apache.avalon.composition.data.CategoriesDirective;
  @@ -87,6 +85,7 @@
   import org.apache.avalon.composition.model.ClassLoaderModel;
   import org.apache.avalon.composition.model.ModelRepository;
   import org.apache.avalon.composition.model.impl.DefaultSystemContext;
  +import org.apache.avalon.composition.model.impl.DelegatingSystemContext;
   import org.apache.avalon.composition.model.impl.DefaultModelFactory;
   import org.apache.avalon.composition.model.impl.DefaultContainmentContext;
   import org.apache.avalon.composition.model.impl.DefaultContainmentModel;
  @@ -103,6 +102,7 @@
   import org.apache.avalon.framework.configuration.ConfigurationException;
   import org.apache.avalon.framework.configuration.DefaultConfiguration;
   import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
  +import org.apache.avalon.framework.parameters.Parameters;
   
   import org.apache.avalon.merlin.Kernel;
   import org.apache.avalon.merlin.KernelException;
  @@ -375,12 +375,20 @@
             "repository established: " + repository );
   
           //
  +        // create the <parameters>
  +        //
  +
  +        Configuration paramsConfig = kernelConfig.getChild( "parameters" );
  +        Parameters params = Parameters.fromConfiguration(
  +            paramsConfig, "parameter" );
  +
  +        //
           // create the system context
           //
   
           File anchor = criteria.getAnchorDirectory();
   
  -        DefaultSystemContext applicationContext = 
  +        DefaultSystemContext systemContext = 
             new DefaultSystemContext( 
               m_logging,
               anchor,
  @@ -388,7 +396,8 @@
               criteria.getTempDirectory(),
               repository,
               loggingDescriptor.getName(),
  -            criteria.isDebugEnabled() );
  +            criteria.isDebugEnabled(),
  +            params );
   
           //
           // create the application model
  @@ -396,11 +405,11 @@
   
           getLogger().info( "building application model" );
           final Logger applicationLogger = m_logging.getLoggerForCategory("");
  -        ClassLoader api = applicationContext.getCommonClassLoader();
  +        ClassLoader api = systemContext.getCommonClassLoader();
           ContainmentModel application = 
             new DefaultContainmentModel(
               createContainmentContext( 
  -              applicationContext, applicationLogger, api,
  +              systemContext, applicationLogger, api,
                 getContainmentProfile( 
                   kernelConfig.getChild( "container" ) ) ) );
   
  @@ -411,67 +420,44 @@
   
           getLogger().info( "facilities deployment" );
   
  -        Configuration facilities = 
  +        Configuration facilitiesConfig = 
             kernelConfig.getChild( "system" );
   
  -        DefaultSystemContext systemContext = 
  -          new DefaultSystemContext( 
  -            m_logging,
  -            anchor,
  -            criteria.getContextDirectory(),
  -            criteria.getTempDirectory(),
  -            repository,
  -            loggingDescriptor.getName(),
  -            criteria.isDebugEnabled() );
  -
  -        systemContext.put( "urn:merlin:dir", criteria.getWorkingDirectory() );
  -        systemContext.put( "urn:merlin:anchor", criteria.getAnchorDirectory() );
  -        systemContext.put( "urn:merlin:model", application );
  -
  -        systemContext.makeReadOnly();
  +        DelegatingSystemContext facilitiesContext = 
  +          new DelegatingSystemContext( systemContext );
  +        facilitiesContext.put( "urn:merlin:dir", criteria.getWorkingDirectory() );
  +        facilitiesContext.put( "urn:merlin:anchor", criteria.getAnchorDirectory() );
  +        facilitiesContext.put( "urn:merlin:model", application );
  +        facilitiesContext.makeReadOnly();
   
           ClassLoader spi = BlockContext.class.getClassLoader();
           final Logger systemLogger = getLogger();
  -        ContainmentModel system = 
  +        ContainmentModel facilities = 
             new DefaultContainmentModel(
               createContainmentContext( 
  -              systemContext, systemLogger, spi,
  -              getContainmentProfile( facilities ) ) );
  -
  -        //
  -        // TODO: now that the system context is established we 
  -        // need to create a block and supply the system block
  -        // (perhaps under a service manager) to the new model
  -        // model factory to ensure that new system services 
  -        // established under system scope override the bootstrap 
  -        // facilities
  -        //
  +              facilitiesContext, systemLogger, spi,
  +              getContainmentProfile( facilitiesConfig ) ) );
   
  -        DefaultServiceContext services = new DefaultServiceContext();
  -        services.put( LoggingManager.KEY, m_logging );
  +        try
  +        {
  +            getLogger().debug( "system assembly" );
  +            facilities.assemble();
  +        }
  +        catch( Throwable e )
  +        {
  +            final String error = 
  +             "Facilities assembly failure.";
  +            throw new KernelException( error, e );
  +        }
   
           try
           {
  -            m_system = AbstractBlock.createRootBlock( services, system );
  -            if( m_system instanceof Composite )
  -            {
  -                try
  -                {
  -                    getLogger().debug( "system assembly" );
  -                    ((Composite)m_system).assemble();
  -                }
  -                catch( Throwable e )
  -                {
  -                    final String error = 
  -                      "Facilities assembly failure.";
  -                    throw new KernelException( error, e );
  -                }
  -            }
  +            m_system = AbstractBlock.createRootBlock( facilitiesContext, facilities );
           }
           catch( Throwable e )
           {
               final String error = 
  -              "Facilities composition failure.";
  +              "Facilities establishment failure.";
               throw new KernelException( error, e );
           }
   
  @@ -541,29 +527,11 @@
           }
   
           //
  -        // instantiate the runtime root application block
  -        //
  -        getLogger().info( "deployment" );
  -
  -        getLogger().debug( "activation phase" );
  -        try
  -        {
  -            m_application = 
  -              AbstractBlock.createRootBlock( services, application );
  -        }
  -        catch( Throwable e )
  -        {
  -            final String error = 
  -              "Composition failure.";
  -            throw new KernelException( error, e );
  -        }
  -
  -        //
           // instantiate the kernel
           //
   
           Kernel kernel = 
  -          createKernel( getLogger(), criteria, m_system, m_application );
  +          createKernel( getLogger(), criteria, systemContext, application );
           setShutdownHook( getLogger(), kernel );
           if( criteria.isAutostartEnabled() )
           {
  @@ -603,13 +571,13 @@
       }
   
       private Kernel createKernel(
  -      Logger logger, KernelCriteria criteria, Block system, Block application )
  +      Logger logger, KernelCriteria criteria, SystemContext context, ContainmentModel application )
         throws KernelException
       {
           try
           {
               return new DefaultKernel( 
  -              logger, criteria, system, application );
  +              logger, criteria, context, application );
           }
           catch( Throwable e )
           {
  
  
  
  1.1.2.2   +54 -61    avalon/merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl/DefaultKernel.java
  
  Index: DefaultKernel.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/kernel/impl/src/java/org/apache/avalon/merlin/impl/DefaultKernel.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- DefaultKernel.java	4 Jan 2004 17:23:17 -0000	1.1.2.1
  +++ DefaultKernel.java	7 Jan 2004 16:07:17 -0000	1.1.2.2
  @@ -59,17 +59,20 @@
   import org.apache.avalon.merlin.KernelCriteria;
   import org.apache.avalon.merlin.KernelException;
   import org.apache.avalon.merlin.KernelRuntimeException;
  +
   import org.apache.avalon.activation.appliance.Appliance;
   import org.apache.avalon.activation.appliance.Block;
   import org.apache.avalon.activation.appliance.Composite;
   import org.apache.avalon.activation.appliance.impl.AbstractBlock;
  -import org.apache.avalon.activation.appliance.impl.DefaultServiceContext;
  +
   import org.apache.avalon.composition.data.TargetDirective;
   import org.apache.avalon.composition.logging.LoggingManager;
   import org.apache.avalon.composition.model.ContainmentContext;
   import org.apache.avalon.composition.model.ContainmentModel;
   import org.apache.avalon.composition.model.ComponentModel;
  +import org.apache.avalon.composition.model.SystemContext;
   import org.apache.avalon.composition.util.StringHelper;
  +
   import org.apache.avalon.framework.activity.Disposable;
   import org.apache.avalon.framework.logger.Logger;
   
  @@ -107,9 +110,9 @@
   
       private final KernelCriteria m_criteria;
   
  -    private final Block m_system;
  +    private final SystemContext m_context;
   
  -    private final Block m_application;
  +    private final ContainmentModel m_model;
   
       private final DefaultState m_self = new DefaultState();
   
  @@ -123,6 +126,8 @@
   
       private long m_stateChangeSequenceId = 0;
   
  +    private Block m_application;
  +
       //--------------------------------------------------------------
       // constructor
       //--------------------------------------------------------------
  @@ -132,27 +137,27 @@
       * @param logger the assigned logging channel
       * @param criteria the kernel creation criteria
       * @param system the system block
  -    * @param application the application block
  +    * @param mosdel the application model
       * @exception KernelException if a kernel creation error occurs
       */
       public DefaultKernel( 
         final Logger logger,
         final KernelCriteria criteria, 
  -      final Block system, 
  -      final Block application ) throws KernelException
  +      final SystemContext context,
  +      final ContainmentModel model ) throws KernelException
       {
           if( logger == null ) 
             throw new NullPointerException( "logger" );
           if( criteria == null ) 
             throw new NullPointerException( "criteria" );
  -        if( system == null ) 
  -          throw new NullPointerException( "system" );
  -        if( application == null ) 
  -          throw new NullPointerException( "application" );
  +        if( context == null ) 
  +          throw new NullPointerException( "context" );
  +        if( model == null ) 
  +          throw new NullPointerException( "model" );
   
           m_criteria = criteria;
  -        m_system = system;
  -        m_application = application;
  +        m_context = context;
  +        m_model = model;
           m_logger = logger;
   
           setState( INITIALIZED );
  @@ -160,7 +165,7 @@
           if( getLogger().isDebugEnabled() )
           {
               int count = 
  -              m_application.getContainmentModel().getModels().length;
  +              m_model.getModels().length;
               if( count == 0 )
               {
                   getLogger().debug( "kernel established" );
  @@ -345,6 +350,11 @@
       */
       public Appliance locate( String path ) throws KernelException
       {
  +        if( null == m_application )
  +        {
  +            throw new IllegalStateException( "not-started" );
  +        }
  +
           try
           {
               return m_application.locate( path );
  @@ -377,30 +387,37 @@
       */
       public void startup() throws Exception
       {
  +        //
  +        // instantiate the runtime root application block
  +        //
  +
           synchronized( m_self )
           {
               if( m_self.isEnabled() ) return;
  +            setState( ASSEMBLY );
  +            try
  +            {
  +                getLogger().debug( "application assembly" );
  +                m_model.assemble();
  +            }
  +            catch( Throwable e )
  +            {
  +                final String error = 
  +                  "Application assembly failure.";
  +                throw new KernelException( error, e );
  +            }
   
  -            //
  -            // we have a model established and we now need to go though the process
  -            // of appliance establishment
  -            //
  -
  -            if( m_application instanceof Composite )
  +            try
               {
  -                setState( ASSEMBLY );
  -                try
  -                {
  -                    getLogger().debug( "assembly phase" );
  -                    ((Composite)m_application).assemble();
  -                }
  -                catch( Throwable e )
  -                {
  -                    setState( INITIALIZED );
  -                    final String error = 
  -                      "Application assembly failure.";
  -                    throw new KernelException( error, e );
  -                }
  +                m_application = 
  +                  AbstractBlock.createRootBlock( m_context, m_model );
  +                setState( INITIALIZED );
  +            }
  +            catch( Throwable e )
  +            {
  +                final String error = 
  +                  "Application establishment failure.";
  +                throw new KernelException( error, e );
               }
   
               Throwable cause = null;
  @@ -471,19 +488,16 @@
   
                   try
                   {
  -                    if( m_application instanceof Composite )
  -                    {
  -                        setState( DISSASSEMBLY );
  -                        getLogger().info( "dissassembly phase" );
  -                        ((Composite)m_application).disassemble();
  -                    }
  +                    setState( DISSASSEMBLY );
  +                    getLogger().info( "dissassembly phase" );
  +                    m_model.disassemble();
                   }
                   catch( Throwable e )
                   {
                       if( getLogger().isWarnEnabled() )
                       {
                           final String error =
  -                          "Ignoring block dissassembly error.";
  +                          "Ignoring application dissassembly error.";
                           getLogger().warn( error, e );
                       }
                   }
  @@ -499,27 +513,6 @@
               m_self.setEnabled( false );
           }
       }
  -
  -                /*
  -                setState( BLOCK_DISPOSAL );
  -                try
  -                {
  -                    if( m_block instanceof Disposable )
  -                    {
  -                        getLogger().info( "disposal phase" );
  -                        ((Disposable)m_block).dispose();
  -                    }
  -                }
  -                catch( Throwable e )
  -                {
  -                    if( getLogger().isWarnEnabled() )
  -                    {
  -                        final String error =
  -                          "Ignoring block disposal error.";
  -                        getLogger().warn( error, e );
  -                    }
  -                }
  -                */
   
       //--------------------------------------------------------------
       // internal
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org