You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by do...@apache.org on 2002/06/18 10:13:18 UTC

cvs commit: jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel ComponentEntry.java AbstractServiceKernel.java

donaldp     2002/06/18 01:13:18

  Modified:    containerkit/src/java/org/apache/excalibur/containerkit/kernel
                        AbstractServiceKernel.java
  Added:       containerkit/src/java/org/apache/excalibur/containerkit/kernel
                        ComponentEntry.java
  Log:
  Start of a generic container that failed .. committing in so can move computers...
  
  Revision  Changes    Path
  1.2       +197 -3    jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/AbstractServiceKernel.java
  
  Index: AbstractServiceKernel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/AbstractServiceKernel.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AbstractServiceKernel.java	14 Jun 2002 08:00:47 -0000	1.1
  +++ AbstractServiceKernel.java	18 Jun 2002 08:13:18 -0000	1.2
  @@ -7,6 +7,19 @@
    */
   package org.apache.excalibur.containerkit.kernel;
   
  +import java.util.Arrays;
  +import java.util.HashMap;
  +import java.util.List;
  +import org.apache.avalon.excalibur.i18n.ResourceManager;
  +import org.apache.avalon.excalibur.i18n.Resources;
  +import org.apache.avalon.framework.activity.Initializable;
  +import org.apache.avalon.framework.activity.Startable;
  +import org.apache.avalon.framework.context.Contextualizable;
  +import org.apache.avalon.framework.logger.AbstractLogEnabled;
  +import org.apache.excalibur.containerkit.dependency.DependencyGraph;
  +import org.apache.excalibur.containerkit.lifecycle.LifecycleHelper;
  +import org.apache.excalibur.containerkit.lifecycle.ResourceProvider;
  +
   /**
    *
    *
  @@ -14,8 +27,189 @@
    * @version $Revision$ $Date$
    */
   public abstract class AbstractServiceKernel
  +    extends AbstractLogEnabled
  +    implements Contextualizable, Initializable, Startable
   {
  -    protected abstract Object getComponent( String name );
  +    private final static Resources REZ =
  +        ResourceManager.getPackageResources( AbstractServiceKernel.class );
  +
  +    /**
  +     * The resource provider to use to provide resources
  +     * for all the components.
  +     */
  +    private ResourceProvider m_resourceProvider;
  +
  +    /**
  +     * The component that is responsible for running components
  +     * through their lifecycle stages.
  +     */
  +    private LifecycleHelper m_lifecycleHelper;
  +
  +    /**
  +     * The map of all entrys present in application.
  +     */
  +    private final HashMap m_entrys = new HashMap();
  +
  +    public void initialize()
  +        throws Exception
  +    {
  +        m_resourceProvider = prepareResourceProvider();
  +        m_lifecycleHelper = prepareLifecycleHelper();
  +    }
  +
  +    protected abstract ResourceProvider prepareResourceProvider();
  +
  +    protected LifecycleHelper prepareLifecycleHelper()
  +    {
  +        final LifecycleHelper lifecycleHelper = new LifecycleHelper();
  +        setupLogger( lifecycleHelper, "lifecycle" );
  +        return lifecycleHelper;
  +    }
  +
  +    protected final void startupAllComponents()
  +        throws Exception
  +    {
  +        //final String[] order = DependencyGraph.walkGraph( true, components );
  +        //processComponents( true, order );
  +    }
  +
  +    protected final void shutdownAllComponents()
  +        throws Exception
  +    {
  +//        final String[] order = DependencyGraph.walkGraph( false, components );
  +//        processComponents( false, order );
  +    }
  +
  +    protected final void startupComponent( final String name )
  +        throws Exception
  +    {
  +//        final String[] order = DependencyGraph.walkGraph( false, components );
  +//        processComponents( false, order );
  +    }
  +
  +    protected final void shutdownComponent( final String name )
  +        throws Exception
  +    {
  +    }
  +
  +    /**
  +     * Process a whole assembly through a lifecycle phase
  +     * (ie startup or shutdown). The components should be processed
  +     * in order specified by the dependency graph.
  +     *
  +     * @param startup true if application startup phase, false if shutdown phase
  +     * @param order
  +     * @throws Exception if there is error processing any of the components
  +     *         through the phases
  +     */
  +    private void processComponents( final boolean startup,
  +                                    final String[] order )
  +        throws Exception
  +    {
  +        processComponentsNotice( order, startup );
  +
  +        for( int i = 0; i < order.length; i++ )
  +        {
  +            processComponent( order[ i ], startup );
  +        }
  +    }
  +
  +    /**
  +     * Process a component through a lifecycle phase
  +     * (ie startup or shutdown). If it is startup phase then
  +     * it is expected that all the providers for the components
  +     * dependencies have been process. If it is the shutdown phase
  +     * it is expected that all of the consumers of services provided
  +     * by this component have already been shutdown.
  +     *
  +     * @param name the name of the component
  +     * @param startup true if application startup phase, false if shutdown phase
  +     * @throws Exception if there is error processing any of the components
  +     *         through the phases
  +     */
  +    private void processComponent( final String name,
  +                                   final boolean startup )
  +        throws Exception
  +    {
  +        processComponentNotice( startup, name, false );
  +
  +        try
  +        {
  +            final ComponentEntry entry =
  +                (ComponentEntry)m_entrys.get( name );
  +            if( startup )
  +            {
  +                final Object object =
  +                    m_lifecycleHelper.startup( name,
  +                                               entry,
  +                                               m_resourceProvider );
  +                entry.setObject( object );
  +            }
  +            else
  +            {
  +                final Object object = entry.getObject();
  +                entry.setObject( null );
  +                m_lifecycleHelper.shutdown( name, object );
  +            }
  +        }
  +        catch( final Exception e )
  +        {
  +            final String message =
  +                REZ.getString( "app.error.run-phase",
  +                               startup ? "0":"1",
  +                               name,
  +                               e.getMessage() );
  +            getLogger().error( message, e );
  +            throw e;
  +        }
  +
  +        processComponentNotice( startup, name, true );
  +    }
  +
  +    /**
  +     * Log message describing the number of components
  +     * the phase in and the order in which they will be
  +     * processed
  +     *
  +     * @param order the order the components will be processed in
  +     * @param startup true if application startup phase, false if shutdown phase
  +     */
  +    private void processComponentsNotice( final String[] order,
  +                                          final boolean startup )
  +    {
  +
  +        if( getLogger().isInfoEnabled() )
  +        {
  +            final Integer count = new Integer( order.length );
  +            final List pathList = Arrays.asList( order );
  +            final String message =
  +                REZ.getString( "components-processing",
  +                               count,
  +                               startup ? "0":"1",
  +                               pathList );
  +            getLogger().info( message );
  +        }
  +    }
   
  -    protected abstract Object getContextValue( String name, Object entry );
  +    /**
  +     * Log processing of component.
  +     *
  +     * @param name the name of component processing
  +     * @param startup true if application startup phase, false if shutdown phase
  +     */
  +    private void processComponentNotice( final boolean startup,
  +                                         final String name,
  +                                         final boolean completed )
  +    {
  +        if( getLogger().isDebugEnabled() )
  +        {
  +            final String key =
  +                completed ? "processed-component": "process-component";
  +            final String message =
  +                REZ.getString( key,
  +                               startup ? "0":"1",
  +                               name );
  +            getLogger().debug( message );
  +        }
  +    }
   }
  
  
  
  1.1                  jakarta-avalon-excalibur/containerkit/src/java/org/apache/excalibur/containerkit/kernel/ComponentEntry.java
  
  Index: ComponentEntry.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included  with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.excalibur.containerkit.kernel;
  
  import org.apache.excalibur.containerkit.metadata.ComponentMetaData;
  import org.apache.avalon.framework.configuration.Configuration;
  
  /**
   * This is the structure that Components are contained within when
   * loaded into Container.
   *
   * @author <a href="mailto:peter@apache.org">Peter Donald</a>
   * @version $Revision: 1.1 $ $Date: 2002/06/18 08:13:18 $
   */
  public class ComponentEntry
  {
      /**
       * The {@link ComponentMetaData} that describes
       * this component.
       */
      private final ComponentMetaData m_metaData;
  
      /**
       * The instance of this component.
       */
      private Object m_object;
  
      /**
       * The configuration for component.
       * Should be null if component does not implement Configurable.
       */
      private Configuration m_configuration;
  
      public ComponentEntry( final ComponentMetaData metaData )
      {
          m_metaData = metaData;
      }
  
      public String getName()
      {
          return getMetaData().getName();
      }
  
      public ComponentMetaData getMetaData()
      {
          return m_metaData;
      }
  
      public Configuration getConfiguration()
      {
          return m_configuration;
      }
  
      public void setConfiguration( final Configuration configuration )
      {
          m_configuration = configuration;
      }
  
      public Object getObject()
      {
          return m_object;
      }
  
      public void setObject( final Object object )
      {
          m_object = object;
      }
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>